2015-10-01 70 views
0

我找不到一種基於WebApi爲移動服務項目刪除默認路徑路徑的方法。它生成我不想提供給客戶端應用程序的路由,例如「/ api/{controller}/{id}」和「/ tables/{controller}/{id}」。取而代之,我正在映射這樣的路由 - 「/ api_v1/{controller}/{id}」,並且希望將其作爲訪問數據的一條可能路線。如何從WebApi中刪除默認路由?

這裏是不起作用的代碼:

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(「」),對每個可能的路線我已經和它消除只有一個名字「表」。但是「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'路線?

+0

沒有什麼了產生的WebAPI「默認」路由(尤其是與「表」前綴)。你的代碼(或者你使用的任何庫)應該有一些東西來設置它們。 –

+0

從「Azure Mobile Service」模板創建的項目以及它生成15個默認路由的項目,我在debbuger中看到。 –

+0

你有沒有試過在'ServiceConfig'中尋找? –

回答

0

好吧,config.Routes.Remove方法應該用於此。要獲取要刪除的路由名稱,您可以在調試器中查看它們。 enter image description here

默認路由名稱的名稱爲'DefaultApis'。

所以此代碼的工作:

ServiceConfig.Config.Routes.Remove("DefaultApis");    
ServiceConfig.Config.Routes.Remove("tables"); 
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 } 

additionnally,如果你想通過MVC屬性使用路由,您可以添加以下行:

routes.MapMvcAttributeRoutes(); 
+0

我知道RouteConfig,但是' t Azure Mobile Serivce的這種文件。所以沒有什麼可以刪除的。 –