当试图找到以下问题的解决方案时:
默认操作的 MVC Web Api 路由不起作用 https://stackoverflow.com/questions/11724749/mvc-web-api-route-with-default-action-not-working/11725968#11725968
大多数时候我遇到的问题是“发现了多个操作”。如果路由机制发现多个动作与一条路由匹配,则会抛出异常 500。
例如,ValuesController中有两个操作:
[HttpGet]
public IEnumerable<String> Active()
{
var result = new List<string> { "active1", "active2" };
return result;
}
public IEnumerable<string> Get()
{
return new[] { "value1", "value2" };
}
与默认路由匹配:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
With
GET: /api/values
会出现错误,发现多个操作。
我的问题:如何通过选择指定的操作来绕过“找到多个操作”的异常(选择第一个匹配的操作也可以)。
更新1:从 tugberk 的评论更新,感谢指出。
更新2:从迈克的评论更新,似乎问题不太正确,所以我改变了询问方式,不提及路由约束。
Thanks
首先,除非您对其应用 HttpGet 属性,否则这些路由不可能匹配 Active 操作。我假设你已经这样做了。第二件事是你想要的不符合逻辑。您想要发出一个 get 请求并执行两个相同的操作。您现在正在使用所谓的基于 HTTP 方法的路由。对于您的情况,我确信所谓的基于操作的路由是最好的。
假设您有以下两个操作:
[HttpGet]
public IEnumerable<String> Active()
{
var result = new List<string> { "active1", "active2" };
return result;
}
[HttpGet]
public IEnumerable<string> Retrieve()
{
return new[] { "value1", "value2" };
}
你的路线应该如下:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
然后您可以向具有以下 URI 的人请求:
GET /控制器名称/检索
GET /控制器名称/活动
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)