属性路由不是现有路由
Attribute Routing not existing routes
我有一个带有属性路由的项目,例如:
[Route("home")]
public class HomeController : Controller
{
[HttpPost]
public IActionResult Post(int id)
{
}
[HttpGet]
public IActionResult Get()
{
}
}
现在我想捕获所有 Get/Post/Put 没有指定路由的请求。所以我可以 return 一个错误,重定向到主页和诸如此类的东西。是否可以使用 AttributeRouting 或我应该在启动时使用 Conventional Routing? "not existing" 路线在那里看起来如何?
默认情况下,服务器 returns 404 HTTP 状态代码作为未被任何中间件处理的请求的响应(attribute/convention 路由是 MVC 中间件的一部分)。
一般来说,您总是可以做的是在管道的开头添加一些中间件来捕获所有具有 404 状态代码的响应并执行自定义逻辑或更改响应。
在实践中,您可以使用 ASP.NET Core 提供的现有机制,称为 StatusCodePages
middleware。您可以通过
将其直接注册为原始中间件
public void Configure(IApplicationBuilder app)
{
app.UseStatusCodePages(async context =>
{
context.HttpContext.Response.ContentType = "text/plain";
await context.HttpContext.Response.WriteAsync(
"Status code page, status code: " +
context.HttpContext.Response.StatusCode);
});
//note that order of middlewares is importante
//and above should be registered as one of the first middleware and before app.UseMVC()
中间件支持多种扩展方式,如下(区别在this article中有很好的解释):
app.UseStatusCodePages("/error/{0}");
app.UseStatusCodePagesWithRedirects("/error/{0}");
app.UseStatusCodePagesWithReExecute("/error/{0}");
其中 "/error/{0}"
是一个路由模板,可以是您需要的任何内容,它的 {0}
参数将代表错误代码。
例如要处理 404 错误,您可以添加以下操作
[Route("error/404")]
public IActionResult Error404()
{
// do here what you need
// return custom API response / View;
}
或一般操作
[Route("error/{code:int}")]
public IActionResult Error(int code)
我有一个带有属性路由的项目,例如:
[Route("home")]
public class HomeController : Controller
{
[HttpPost]
public IActionResult Post(int id)
{
}
[HttpGet]
public IActionResult Get()
{
}
}
现在我想捕获所有 Get/Post/Put 没有指定路由的请求。所以我可以 return 一个错误,重定向到主页和诸如此类的东西。是否可以使用 AttributeRouting 或我应该在启动时使用 Conventional Routing? "not existing" 路线在那里看起来如何?
默认情况下,服务器 returns 404 HTTP 状态代码作为未被任何中间件处理的请求的响应(attribute/convention 路由是 MVC 中间件的一部分)。
一般来说,您总是可以做的是在管道的开头添加一些中间件来捕获所有具有 404 状态代码的响应并执行自定义逻辑或更改响应。
在实践中,您可以使用 ASP.NET Core 提供的现有机制,称为 StatusCodePages
middleware。您可以通过
public void Configure(IApplicationBuilder app)
{
app.UseStatusCodePages(async context =>
{
context.HttpContext.Response.ContentType = "text/plain";
await context.HttpContext.Response.WriteAsync(
"Status code page, status code: " +
context.HttpContext.Response.StatusCode);
});
//note that order of middlewares is importante
//and above should be registered as one of the first middleware and before app.UseMVC()
中间件支持多种扩展方式,如下(区别在this article中有很好的解释):
app.UseStatusCodePages("/error/{0}");
app.UseStatusCodePagesWithRedirects("/error/{0}");
app.UseStatusCodePagesWithReExecute("/error/{0}");
其中 "/error/{0}"
是一个路由模板,可以是您需要的任何内容,它的 {0}
参数将代表错误代码。
例如要处理 404 错误,您可以添加以下操作
[Route("error/404")]
public IActionResult Error404()
{
// do here what you need
// return custom API response / View;
}
或一般操作
[Route("error/{code:int}")]
public IActionResult Error(int code)