gpt4 book ai didi

c# - ASP.NET Core Razor Pages OnGet of Error 模型未被执行

转载 作者:行者123 更新时间:2023-12-05 08:51:55 26 4
gpt4 key购买 nike

我修改了默认的 Error.cshtml.cs 以在抛出错误时进行记录,并且它工作了一段时间。现在,在更新到 .NET Core 3.0 版本后,它不再有效。

这是我的错误模型:

[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public class ErrorModel : PageModel
{
public string RequestId { get; set; }

public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);

public IActionResult OnGet()
{
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;

var exceptionHandlerPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();

try
{
Logger.LogMessage(new LogMessage
{
RequestId = RequestId,
Exception = exceptionHandlerPathFeature?.Error,
Time = DateTime.Now
});
}
catch (Exception)
{
// ignored
}

return Page();
}
}

这是我的错误 cshtml:

@page "/Error"
@model ErrorModel
@{
ViewData["Title"] = "Error";
}
<h2 class="text-danger">Ein Fehler ist aufgetreten.</h2>

@if (Model.ShowRequestId)
{
<p>
<strong>Anfrage ID:</strong> <code>@Model.RequestId</code>
</p>
}

<h3>Hoppla, das sollte nicht passieren</h3>
<p>
Bitte merken Sie sich doch den Ablauf der zu diesem Fehler führte und melden Sie ihn dem
verantwortlichen Entwickler somit er behoben werden kann. Bitte fügen Sie auch mindestens die ersten 8 Zeichen der Anfrage ID an
</p>

引用这里是我的启动类中的配置方法

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles();
app.UseSession();

if (env.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseCookiePolicy();

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapHub<FingerprintHub>("/Hub/FingerprintHub");
endpoints.MapHub<RegistrationHub>("/Hub/RegistrationHub");
});

app.UseWebSockets();
}

问题是我的 ShowRequestId 始终为 false,这意味着我的 RequestId 为 null 或为空。我在我的 OnGet 方法中放置了一个断点并确认它没有被执行。

我还尝试使用中间件来记录我的异常,但这也没有用。

有人知道是什么原因造成的吗?

最佳答案

app.UseExceptionHandler("/Error") 因许多错误而停止工作的原因有 2 个。

  1. ExceptionHandler 可以通过GET 方法或POST 方法调用Error 页面,POST 方法将当您向服务器POST 请求并发生异常时调用。

  2. 当ExceptionHandler 调用POST 方法时,如果不添加[IgnoreAntiforgeryToken]<,则无法到达Error 页面PageModel

所以你必须添加OnPost方法和属性[IgnoreAntiforgeryToken]

[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
[IgnoreAntiforgeryToken]
public class ErrorModel : PageModel
{
...

public ActionResult OnGet()
{
HandleError();
return Page();
}

public ActionResult OnPost()
{
HandleError();
return Page();
}

private void HandleError()
{
...
var exceptionHandlerPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
....
}
}

好好享受吧!

关于c# - ASP.NET Core Razor Pages OnGet of Error 模型未被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58163734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com