如何配置路由路径直接指向Controller而非获取方法名?
问题解决:ASP.NET Web API 接口访问路径配置
环境与问题
这是基于.NET 4.8.1的C# ASP.NET Web API程序,想要通过GET api/user?userCode=的方式直接访问接口,但尝试省略ActionName、创建名为Get()的方法都无效。
当前配置
路由配置
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
控制器代码
public class UserController : ApiController { [HttpGet, ActionName("Get")] public object GetUserInfo(string userCode) { return new { userCode, userPwd = "123" }; } }
解决方法
方法1:添加默认Action的路由规则
现有路由模板要求必须指定action名称,要实现api/user?userCode=的访问方式,需要在现有路由前新增一条针对GET请求的默认路由:
// 新增:匹配不带action的GET请求,默认action为Get config.Routes.MapHttpRoute( name: "DefaultApiGet", routeTemplate: "api/{controller}", defaults: new { action = "Get" }, constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) } ); // 保留原有的默认路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
这条新路由会优先匹配不带action的GET请求,自动将action设为Get,对应你控制器里标记了ActionName("Get")的GetUserInfo方法。
方法2:修改控制器方法名(无需改路由但需调整访问路径)
如果不想修改路由,可以把控制器方法名改成Get,直接访问api/user/Get?userCode=即可生效:
public class UserController : ApiController { [HttpGet] public object Get(string userCode) { return new { userCode, userPwd = "123" }; } }
注意事项
查询字符串参数userCode会被Web API自动绑定,只要路由匹配到对应方法,就能正确获取参数值。
内容的提问来源于stack exchange,提问作者Yogi
相关产品推荐
相关产品推荐

