Mic*_*ael 9 asp.net-mvc asp.net-core-mvc asp.net-core
我想要一个通用的404 Not Found页面(HTTP 200),而不是获得HTTP 404响应.我知道你可以在MVC 5中设置它
<customErrors mode="On">
<error statusCode="404" redirect="~/Error/NotFound" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
但我似乎无法弄清楚如何在MVC 6中执行此操作.我猜它应该在UseMvc路由表或自定义中间件中.
Bar*_*xto 13
Startup.cs:
public class Startup
{
public void Configure(IApplicationBuilder app)
{
// PICK YOUR FLAVOR.
// app.UseErrorPage(ErrorPageOptions.ShowAll);
app.UseStatusCodePages(); // There is a default response but any of the following can be used to change the behavior.
// app.UseStatusCodePages(context => context.HttpContext.Response.SendAsync("Handler, status code: " + context.HttpContext.Response.StatusCode, "text/plain"));
// app.UseStatusCodePages("text/plain", "Response, status code: {0}");
// app.UseStatusCodePagesWithRedirects("~/errors/{0}"); // PathBase relative
// app.UseStatusCodePagesWithRedirects("/base/errors/{0}"); // Absolute
// app.UseStatusCodePages(builder => builder.UseWelcomePage());
// app.UseStatusCodePagesWithReExecute("/errors/{0}");
}
}
Run Code Online (Sandbox Code Playgroud)
project.json:
"dependencies": {
"Microsoft.AspNet.Diagnostics": "1.0.0-*",
// ....
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您在IIS(或azure)上托管,web.config它仍然有效,并且在某些托管方案中可能需要它.(它应放在wwwroot文件夹中
小智 5
您可以使用 来处理 404 错误,UseStatusCodePagesWithReExecute
但您需要首先在配置管道末尾设置状态代码。
public void Configure(IApplicationBuilder app)
{
app.UseIISPlatformHandler();
if (string.Equals(_env.EnvironmentName, "Development", StringComparison.OrdinalIgnoreCase))
{
app.UseDeveloperExceptionPage();
app.UseRuntimeInfoPage();
} else
{
app.UseExceptionHandler("/Error");
}
app.UseStatusCodePagesWithReExecute("/Error/Status/{0}");
app.UseStaticFiles();
app.UseMvc();
app.Use((context, next) =>
{
context.Response.StatusCode = 404;
return next();
});
}
Run Code Online (Sandbox Code Playgroud)
如果管道中没有任何内容可以处理它(这正是您想要的),这会将状态代码设置为 404。
然后,您可以在控制器中以任何您想要的方式轻松捕获和处理响应。
[Route("error")]
public class ErrorController : Controller
{
[Route("Status/{statusCode}")]
public IActionResult StatusCode(int statusCode)
{
//logic to generate status code response
return View("Status", model);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7853 次 |
| 最近记录: |