2013-04-28 116 views
6

如何在使用AttributeRouting而不是WebAPI使用的默認RouteConfiguration時設置默認控制器。 即擺脫了註釋代碼段,因爲這個使用AttribteRouting使用AttributeRouting指定WebAPI中的默認控制器/操作路由

public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     //routes.MapRoute(
     // name: "Default", 
     // url: "{controller}/{action}/{id}", 
     // defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     //); 

     } 
    } 

如果我評論上面的部分,並嘗試運行的WebAPI應用時是多餘的,我得到以下錯誤,因爲沒有默認的首頁控制器/行動定義。 HTTP錯誤403.14 - 禁止 Web服務器配置爲不列出此目錄的內容。

如何通過屬性路由爲主控制器/操作指定路由?

編輯:代碼示例:

public class HomeController : Controller 
{ 
    [GET("")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Help() 
    { 
     var explorer = GlobalConfiguration.Configuration.Services.GetApiExplorer(); 
     return View(new ApiModel(explorer)); 
    } 
} 
+0

既然你寫道你正在使用AttributeRouting,你能否在你的問題中提供一個代碼示例,顯示一個控制器動作標記爲AttributeRouting屬性? – 2013-06-13 19:04:53

+0

@Pete:我已更新該帖子以包括代碼示例 – 2013-06-18 05:39:10

回答

5

你有沒有試過如下:

//[RoutePrefix("")] 
public class HomeController : Controller 
{ 
    [GET("")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

這將集合中與網址模板添加路由爲「」,默認爲控制器和行動分別是「Home」和「Index」。

+0

上述似乎並不工作我已更新該帖子以包含代碼片段 – 2013-06-18 05:42:48

+0

您是否還可以檢查是否調用屬性路由的擴展ion'MapAttributeRoutes'? – 2013-06-18 05:58:35

+0

是在AttributeRoutingHttp的RegisterRoutes方法中靜態類 – 2013-06-18 07:02:26

1

您需要安裝AttributeRouting (ASP.NET MVC)以及您已安裝的AttributeRouting (ASP.NET Web API)

MVC和Web API包是免費包。兩者都依賴於AttributeRouting.Core。*包。 MVC的AR適用於Controller方法上的路由; Web API的AR適用於ApiController方法的路由。

+1

您是否在爲WebAPI建議將AttributeRouting for MVC與AttributeRouting一起安裝? – 2013-06-20 06:18:20

+1

是的,你需要添加MVC包。它們是免費的軟件包,都依賴於AttributeRouting.Core。*軟件包。 MVC的AR適用於Controller方法上的路由; Web API的AR適用於ApiController方法的路由。 (我編輯了我的答案,以表明清楚) – 2013-06-20 19:57:46

1

這對我有效。在WebApiConfig

config.Routes.MapHttpRoute(
       name: "AppLaunch", 
       routeTemplate: "", 
       defaults: new 
       { 
        controller = "Home", 
        action = "Get" 
       } 
      ); 
1

這個添加到Register()啓用屬性在位於App_Start文件夾通過將下面的代碼你WebApiConfig級路由:

using System.Web.Http; 

namespace MarwakoService 
{ 
     public static class WebApiConfig 
     { 
      public static void Register(HttpConfiguration config) 
      { 
       // Web API routes 
       config.MapHttpAttributeRoutes(); 

       // Other Web API configuration not shown. 
      } 
     } 
} 

可以與基於慣例屬性結合在一起:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
      // Attribute routing. 
      config.MapHttpAttributeRoutes(); 

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

現在去你的Global.asax類,並添加以下代碼行:

GlobalConfiguration.Configure(WebApiConfig.Register); 

您的HomeController是一個MVC控制器。嘗試創建一個API控制器(比方說,一個CustomersController)並添加路由屬性如下:

[RoutePrefix("api/Product")] 
public class CustomersController : ApiController 
{ 
    [Route("{customerName}/{customerID:int}/GetCreditCustomer")] 
    public IEnumerable<uspSelectCreditCustomer> GetCreditCustomer(string customerName, int customerID) 
    { 
     ... 
    } 

希望它可以幫助

0

一個標準的MVC應用程序可以同時擁有MVC和的WebAPI的支持,如果你檢查這兩個MVC和來自Create New Asp.net Web應用程序模板的Webapi。

你需要做到以下幾點下RouteConfig.cs作爲查詢特定於MVC的路線,而不是那些的WebAPI:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapMvcAttributeRoutes(); 
    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

    } 
} 

通知與「路線行。MapMvcAttributeRoutes();「它提供屬性路由,而對」routes.MapRoute(...)「的調用應該爲您提供傳統的路由到默認控制器和動作

這是因爲屬性路由和常規路由可以 希望有幫助

相關問題