您好我有这个REST服务
我使用此映射成功配置路由:
config.Routes.MapHttpRoute(
name: "ActionApiWithId",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这个控制器
public class AdminController : ApiController
{
// GET api/admin/delegatedusers
[ActionName("delegatedusers")]
public IEnumerable<x> Get()
{
}
// GET api/delegatedusers/<userid>
[ActionName("delegatedusers")]
public x Get(String id)
{
}
}
public class DelegatedUsersController : ApiController
{
public x Get()
{
}
}
问题是我添加了一个未正确解析的新方法。方法是
使用此映射和控制器
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
public class EnrollRequestController : ApiController
{
/// DELETE api/enrollrequest/<id>
public void Delete(String id)
{
}
}
如果我将DefaultApi routMapping置于WebApiConfig文件之上,则此新方法已解决,但GET admin / delegateduser未解析。所以看起来这两种方法在URL解析上存在冲突。
如何正确映射方法?可能一切都应该更简单,我太复杂了....
任何帮助都很受欢迎。
提前致谢。
答案 0 :(得分:0)
最后我找到了解决方案,
冲突是DELETE enrollrequest /和GET admin / delegateduser都符合规则
{controller}/id
{controller}/action
我解决了以这种方式添加约束的问题:
config.Routes.MapHttpRoute(
name: "ActionApiWithId",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { action = "delegatedusers" }
);
现在调用DELETE enrollrequest /不适合路线,因为不满足约束。