我在下面有一条自定义路线和操作。

    [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 }
);

最佳答案

帮助页面将列出每个控制器的每个有效路由。如果您希望某条路线不适用于特定的控制器,则必须在该路线上添加约束以使其不再匹配:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: new {controller = "((?!Sites).)*" }
);


这使用负前瞻正则表达式来匹配每个未命名为Sites的Controller

关于c# - C#WEBApi MVC帮助页面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51734319/

10-11 16:58