新建一个WEB API 项目 使用ActionFilterAttribute拦截器无法拦截 原因就是因为没有匹配路由规则不进控制器, 比如 http://localhost:57821/api/jkbsdbbsdibf 随便输入一通,无法匹配空白页面。
我使用中间件Middleware 获取状态码的时候也显示是200请求。 难道要我把所有匹配的路由遍历一遍?存起来?匹配? 有什么好方法可以拦截到后面的404错误并统一输出想要的JSON格式?
直接在useMvc之后,再挂一个中间件,匹配不到就会到这个中间件来。也就是404了。
我就是app.usemvc之后使用中间件的。 不会匹配不到的。所有请求都会进中间件啊。中间件处理是在路由之前,在ReqestDelegate调用后就会交给MVC路由处理了
@薛凯凯圆滚滚:
app.Use(async (context, next) => { await next(); if (context.Response.StatusCode == 404) { context.Request.Path = "/Home"; await next(); } });
@幻天芒:
app.Use(async (context, next) => { await next(); if (context.Response.StatusCode == 404) { context.Response.ContentType = "application/json"; await context.Response.WriteAsync(JsonConvert.SerializeObject(new { code = 404, msg = "empty", result = "" }, new JsonSerializerSettings { Formatting = Formatting.Indented })); } });
通过调整你的代码。
解决!
就是404返回啊
404也要拦截处理它。懂吧
我就是想处理404 本身如果匹配到路由WebAPI 返回 { code = 200 , msg = "Success", data = ""} 如果匹配不到路由就会空白,这样体验太差了,拦截请求匹配不到也输出 {code = 404, msg = "bad request", data = ""}
@薛凯凯圆滚滚:
好吧.如果真的是问题的话.
你试试
app.UseStatusCodePagesWithReExecute("/error/{0}");
官方文档是https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling
middleware可以搞定
详细说?调用委托方法之后就跳走了。如何搞定?