2013-12-18 111 views
4

我目前有:我怎麼能正則表達式融入我MapHttpRoute爲的WebAPI

config.Routes.MapHttpRoute(
       name: "AccountApiCtrl", 
       routeTemplate: "/api" + "/account/{action}/{id}", 
       defaults: new { controller = "accountapi", id = RouteParameter.Optional } 
      ); 

它發送/API /帳號/ myaction請求accountapi控制器。 (它工作得很好:-))

但是,我寧願不爲每個控制器都做這個,有沒有辦法可以在這裏使用正則表達式,這樣我只需要聲明?

IE這樣:

/API /帳戶/動作前進到控制器:AccountApi 和 /API /用戶/動作前進到控制器:UserApi

即,沿着線的東西:

config.Routes.MapHttpRoute(
       name: "ControllerApiMap", 
       routeTemplate: "/api" + "/{controller}/{action}/{id}", 
       defaults: new { controller = "{controller}+api", id = RouteParameter.Optional } 
      ); 

回答

4

以下是實現這一目標的途徑之一:

config.Services.Replace(typeof(IHttpControllerSelector), new CustomHttpControllerSelector(config)); 

    config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

public class CustomHttpControllerSelector : DefaultHttpControllerSelector 
{ 
    public CustomHttpControllerSelector(HttpConfiguration config) 
     : base(config) 
    { 
    } 

    public override string GetControllerName(HttpRequestMessage request) 
    { 
     IHttpRouteData routeData = request.GetRouteData(); 

     if (routeData.Values.ContainsKey("controller")) 
     { 
      return routeData.Values["controller"] + "api"; 
     } 

     return base.GetControllerName(request); 
    } 
} 
0

請,改變按下面,你將改變正則表達式:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // Route Pattern 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Default values for parameters 
    new { controller = "^H.*", action = "^Index$|^Contact$" } //Restriction for controller and action 
); 

這裏,控制器名稱以H開始,如Home,動作以Index或Contact開頭,其他的都是有爭議的。

+0

這是一個答案? – Baconbeastnz

+0

根據要求,你將在第1部分中改變正則表達式。 – jainvikram444

+0

對不起vikram!我認爲那不是我想要的。 – Baconbeastnz

相關問題