gpt4 book ai didi

c# - Http 错误 404.13 ASP.NET Core MVC 的自定义错误页面

转载 作者:太空狗 更新时间:2023-10-29 21:49:00 26 4
gpt4 key购买 nike

总的来说,我对 ASP.NET 和 MVC 还很陌生;我一直在将 ASP.NET MVC 应用程序迁移到 ASP.NET MVC Core。在以前的框架中,我能够为以下臭名昭著的错误处理 HttpException:

HTTP Error 404.13 - Not Found

The request filtering module is configured to deny a request that exceeds the request content length.

我知道我可以增加允许的最大上传长度,目前默认为 30MB,但我的目标是向用户展示一个友好的错误页面来解释刚刚发生的事情,而不是增加允许的限制。

在 ASP.NET 上,我在 Global.asax 上使用以下代码完成了此操作:

private void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError();
var httpException = ex as HttpException ?? ex.InnerException as HttpException;
if (httpException == null) return;

if (httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge)
{
//handle the error
Response.Redirect("~/Error/UploadTooLarge"); //Redirect to my custom error page

}
}

经过几个小时的研究,我似乎无法在 Asp.Net Core 中找到替代方案。我相信我需要在我的 Startup.cs Configure 方法中插入一些中间件来实现自定义错误页面来处理 HttpException 并重定向它,但我真的迷失在这件事上。

我已经成功地将以下中间件用于 http 错误的自定义错误页面,例如 404 - Not Found 或 403 - Forbiden 通过在我的配置方法中使用以下内容:

app.UseStatusCodePagesWithReExecute("/Error/StatusCode{0}");

与 Controller 一起:

public class ErrorController : Controller
{
public IActionResult StatusCode404()
{
return View(viewName: "CustomNotFound");
}

public IActionResult StatusCode403()
{
return View("CustomForbiden");
}
}

以及相应的观点。但是,我当前的中间件不会处理 404.13 错误(上传太大)。我相信 IIS 正在呈现错误,因为它不是由网络应用程序处理的。

最佳答案

旧帖子,但仍然相关。我的 Core 2.2 MVC 项目包括大型流文件上传,需要优雅地处理 404.13(请求大小太大)结果。设置状态代码处理(优美 View )的常用方法是在 Startup.cs Configure() 中加上一个要匹配的操作方法:

app.UseStatusCodePagesWithReExecute("/Error/Error", "?statusCode={0}");

public IActionResult Error(int? statusCode = null)
{
if (statusCode.HasValue)
{
Log.Error($"Error statusCode: {statusCode}");
if (statusCode == 403)
{
return View(nameof(AccessDenied));
}
if (statusCode == 404)
{
return View(nameof(PageNotFound));
}
}

return View(new ErrorViewModel
{
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
});
}

但是因为 404.13 错误是由 IIS 处理的,而不是在 MVC 管道中,所以上面的代码不允许建立一个优雅的“上传太大”错误 View 。为此,我不得不屏住呼吸,将以下 web.config 添加到我的 Core 2.2 项目中。请注意,删除 404.13 也会删除 404,因此 ErrorController() 代码不再处理 404,因此下面有两个自定义错误处理程序。希望这对某人有帮助!

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<!-- This will handle requests up to 201Mb -->
<requestLimits maxAllowedContentLength="210763776" />
</requestFiltering>
</security>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="13" />
<remove statusCode="404" />
<error statusCode="404"
subStatusCode="13"
prefixLanguageFilePath=""
path="/Error/UploadTooLarge"
responseMode="Redirect" />
<error statusCode="404"
prefixLanguageFilePath=""
path="/Error/PageNotFound"
responseMode="Redirect" />
</httpErrors>
</system.webServer>
</configuration>

关于c# - Http 错误 404.13 ASP.NET Core MVC 的自定义错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648280/

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