C#webAPI限制路由



在webapi项目的WebAPIConfig.cs中,添加了2条路由

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);

我尝试创建一个apiController包含以下功能

[HttpGet]
public string Get(int id)
{
return "get";
}
[HttpGet]
[ActionName("ByWait")]
public string[] ByWait(int id)
{
return "bywait";
}

我希望请求/api/controllername/1234返回"get",并且请求/api/controllername/bywait/1234返回"bywait"。

然而,实际结果是/api/controllername/1234>>抛出异常发现多个操作与请求匹配/api/controllername/bywait/1234>>"by wait">

但是,可以解决这个问题吗?s.t如何限制函数ByWait只接受包含操作的请求,使其只响应/api/controllername/ByWait/1234并忽略/api/concontrollername/1234

或者还有其他更好的解决方案?

感谢

首先您可以更改WebApiConfig:

config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}"
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

然后控制器:

[HttpGet]
public string Get()
{
return "get-default";
}
[HttpGet]
public string Get(int id)
{
return "get" + id;
}
[HttpGet]
[Route("api/values/bywait/{id}")]
public string ByWait(int id)
{
return "bywait";
}

最新更新