2014-02-27 22 views
3

我有一個大的ASP.NET MVC 5應用程序,現在我想爲它實現Web API。但是我想把ApiControllers放在一個單獨的項目中。來自外部程序集的ApiControllers的屬性路由

我有問題,爲Web API組織路線:由

host/* 

而且在

host/api/* 

的API地圖和API的

我想我的主要應用途徑,我想使用屬性路由,但不能以正確的方式設置WebApiConfig。

如何組織這個,保留使用「屬性路由」的能力?

+0

在您的項目中實現Web API的原因是什麼?是否需要爲現有的和新的UI功能提供服務?在這種情況下,我會問,是否有必要將另一個圖層引入已經很大的MVC應用程序中?還是提供一組外部/第三方集成到您的域的服務? –

+0

是的,我們計劃在ClientSide上重新實現UI,併爲第三方服務提供API訪問。 BigApp的舊部分將逐漸消失 – llCorvinuSll

回答

2

我找到了解決辦法:

對於ApiControllers沒有必要重新實現工廠。

在項目網站(主),我們需要:

  1. 添加依賴與ApiControllers

  2. 編輯的Global.asax這樣項目

    取代:

    WebApiConfig.Register(GlobalConfiguration.Configuration); 
    

    GlobalConfiguration.Configure(WebApiConfig.Register); 
    
  3. 在WebApiConfig.Register

    config.MapHttpAttributeRoutes(); 
    

    ,使屬性的路由。

現在Web API引擎可以找到Scope中的所有ApiController。

0

在你WebApiConfig類:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 
    } 
} 

在你的控制器:

[RoutePrefix("api")] 
public class MyController : ApiController 
{ 
    [Route("myaction")] 
    public IHttpActionResult MyAction() 
    { 
     //code 
    } 

    [Route("otheraction/{id}")] 
    public IHttpActionResult OtherAction(int id) 
    { 
     //code 
    } 
} 

現在,這個控制器和路線,這些行動將被映射這樣的:

(東道國)/api/myaction
{host}/api/otheraction/{id}

希望它可以幫助