我下面有一个自定义路线和操作。
[System.Web.Mvc.Route("Sites/{id:string}/Cache")]
public ResponseMessage<Result> DeleteCache ([FromUri] string id)
{
当我获得帮助页面时,它给出了使用此调用的三个示例:
DELETE Sites/{id}/Cache
DELETE Sites/{id}
DELETE api/Sites/DeleteCache?id={id}
我想保留第一个,删除其他的。有内置的方法吗?
这是我的WebApiConfig.cs片段。...
config.Routes.MapHttpRoute(
name: "DeleteCache",
routeTemplate: "{controller}/{id}/Cache",
defaults: new { controller = "Sites", action = "DeleteCache" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
答案 0 :(得分:1)
HelpPage将列出每个控制器的每个有效路由。如果您希望某条路线不适用于特定控制器,则必须在该路线上添加约束以使其不再匹配:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new {controller = "((?!Sites).)*" }
);
这使用负前瞻正则表达式来匹配每个未命名为Sites的Controller