首页 新闻 会员 周边

.NET Core中 如何拦截未匹配路由规则的URL呢?

0
悬赏园豆:10 [已解决问题] 解决于 2017-07-13 10:49

新建一个WEB API 项目 使用ActionFilterAttribute拦截器无法拦截 原因就是因为没有匹配路由规则不进控制器, 比如 http://localhost:57821/api/jkbsdbbsdibf 随便输入一通,无法匹配空白页面。

我使用中间件Middleware 获取状态码的时候也显示是200请求。 难道要我把所有匹配的路由遍历一遍?存起来?匹配? 有什么好方法可以拦截到后面的404错误并统一输出想要的JSON格式?

薛凯凯圆滚滚的主页 薛凯凯圆滚滚 | 初学一级 | 园豆:36
提问于:2017-07-12 19:20
< >
分享
最佳答案
0

直接在useMvc之后,再挂一个中间件,匹配不到就会到这个中间件来。也就是404了。

收获园豆:10
幻天芒 | 高人七级 |园豆:37175 | 2017-07-12 22:31

我就是app.usemvc之后使用中间件的。 不会匹配不到的。所有请求都会进中间件啊。中间件处理是在路由之前,在ReqestDelegate调用后就会交给MVC路由处理了

薛凯凯圆滚滚 | 园豆:36 (初学一级) | 2017-07-12 22:38

@薛凯凯圆滚滚: 

app.Use(async (context, next) =>
    {
        await next();
        if (context.Response.StatusCode == 404)
        {
            context.Request.Path = "/Home"; 
            await next();
        }
    });
幻天芒 | 园豆:37175 (高人七级) | 2017-07-12 22:48

@幻天芒: 

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 }));
                }
            });

通过调整你的代码。

解决!

薛凯凯圆滚滚 | 园豆:36 (初学一级) | 2017-07-13 10:49
其他回答(2)
0

就是404返回啊

吴瑞祥 | 园豆:29449 (高人七级) | 2017-07-12 20:42

404也要拦截处理它。懂吧

支持(0) 反对(0) 薛凯凯圆滚滚 | 园豆:36 (初学一级) | 2017-07-12 22:35

我就是想处理404 本身如果匹配到路由WebAPI 返回 { code = 200 , msg = "Success",  data = ""}  如果匹配不到路由就会空白,这样体验太差了,拦截请求匹配不到也输出 {code = 404, msg = "bad request",  data = ""}

支持(0) 反对(0) 薛凯凯圆滚滚 | 园豆:36 (初学一级) | 2017-07-12 22:43

@薛凯凯圆滚滚: 

好吧.如果真的是问题的话.

你试试

app.UseStatusCodePagesWithReExecute("/error/{0}");

官方文档是https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-07-12 22:43
0

middleware可以搞定

dudu | 园豆:30994 (高人七级) | 2017-07-12 22:31

详细说?调用委托方法之后就跳走了。如何搞定?

支持(0) 反对(0) 薛凯凯圆滚滚 | 园豆:36 (初学一级) | 2017-07-12 22:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册