如何从WebApi中删除默认路由?

时间:2015-10-01 08:30:44

标签: asp.net-web-api

我找不到基于WebApi移除我的移动服务项目的默认路径路径的方法。它会生成诸如" / api / {controller} / {id}"等路由。和" / tables / {controller} / {id}"我不想为客户端应用提供。而不是这个我正在映射这样的路线 - " / api_v1 / {controller} / {id}"并希望将其作为访问数据的一种可能途径。

以下代码不起作用:

public static class WebApiConfig
{
    public static void Register()
    {
        // Use this class to set configuration options for your mobile service
        ConfigOptions options = new ConfigOptions();
        options.LoginProviders.Add(typeof(CustomLoginProvider));            

        // Use this class to set WebAPI configuration options
        HttpConfiguration config = ServiceConfig.Initialize(new ConfigBuilder(options));

        // add login provider            
        config.SetIsHosted(true);


        //foreach (var route in config.Routes)            
        //    Console.WriteLine(route.ToString());
        config.Routes.MapHttpRoute(
              name: "api_v1",
              routeTemplate: "api_v1/{controller}/{id}",
              defaults: new { id = RouteParameter.Optional, } );

        //Create the object of particular router
        string result = "";
        foreach (var r in config.Routes)
            result += r.ToString();
        // This does not remove any route. 
        // Also there is no 'Name' property for Route to know exact match               
        config.Routes.Remove("api");
    }
}

更新 我为每条可能的路线调用config.Routes.Remove(""),它只删除一个名称" tables"。但是" api"路线还在那里。

        ServiceConfig.Config.Routes.Remove("DefaultApi");   // not removed any
        ServiceConfig.Config.Routes.Remove("api");    // not removed any route
        ServiceConfig.Config.Routes.Remove("tables");  // this works!

如何删除默认' api'路线?

2 个答案:

答案 0 :(得分:0)

App_Start中,您应该有一个名为RouteConfig的文件。

在该类中有一个名为RegisterRoutes的方法,您将在其中看到预先配置的路由映射。

您可以根据需要删除这些内容。

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

另外,如果要使用MVC属性进行路由,可以添加以下行:

routes.MapMvcAttributeRoutes();

答案 1 :(得分:0)

好的,应该使用config.Routes.Remove方法。要获取要删除的路由名称,可以在调试器中查看它们。 enter image description here

默认路线名称的名称为' DefaultApis '。

所以这段代码可行:

ServiceConfig.Config.Routes.Remove("DefaultApis");            
ServiceConfig.Config.Routes.Remove("tables");