MVC webapi 自定义路由参数无效 custom route routeparameter not work

2020-09-22  乐帮网

mvc webapi c#

在使用webapi2时部分功能用到了路由参数,几经调试总结出一点经验,一般下面的路由的配置已经足够应对各种情况了,除非有些特殊要求可能用到路由上携带参数。常用配置如下:

//默认路由
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            //自定义路由1
            config.Routes.MapHttpRoute(
                name: "ActionApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

如果我想使用路由参数传值的话可能会配置中下

   //自定义路由2
            config.Routes.MapHttpRoute(
                name: "customApi",
                routeTemplate: "api/custom/{type}/{name}",
                defaults: new { type = RouteParameter.Optional ,name=RouteParameter.Optional}
            );

加上去可能你会发现不能正常解析到我们想到的方法里。请查看以下要点:
1、顺序,  很容易被忽略一点,假设置我们的 自定义路由1 和自定义路由2同时存在则会引发问题。可以把定制的 自定义路由2 放到最前面。
2、参数值 最容易被忽略一点
如果我在CustomController中使用get接收这两个参数,就像下面代码:

 public string Get(string type,string name)
        {
            return $"rec:{type}.{name}";
        }

理论上看着一点问题也没有,但是就是匹配不到呢?你就得从参数值里找原因了。
比如可能我请求的URL是这样的 api/2020.9.10/mobile_2
抱歉你永远也调整不成功,但是如果是这样的url : api/2020_9_10/mobile_2
恭喜你可以正常解析。 看到了吗?这种路由参数中不能有这个“.”,否则就会引发问题。

3、一些稍微灵活的定义可参考如下:

 //自定义路由3
            config.Routes.MapHttpRoute(
                name: "sensorApi",
                routeTemplate: "api/sensor/{name}",
                defaults: new {controller= "upgrade", action= "sensor",name=RouteParameter.Optional}
            );

4、类(方法)属性标签
如果想使用[Route("api/cache/list")] 这样重定义方法名,或者给控制器添加前缀 像这样:[RoutePrefix("test/categories")],或者像这样限制路由参数约束时 [Route("detail/{id:int:min(1)}/")]
则程序启动时必须包含以下代码:

HttpConfiguration config = new HttpConfiguration();
            config.MapHttpAttributeRoutes();

以上就是我使用的总结,欢迎指正共同提高。

推荐文章:

MVC5 webapi2 自定义路由参数无效

MVC WebApi 在控制器“”上找不到与该请求匹配的操作

C# WebApi 获取POST Body内的数据

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力