2013-03-13 143 views
1

我創建了一個WebApi項目,它有多個WebApi控制器。根據我的要求,我必須添加一個MVC控制器到我的WebApi項目。我的客戶端代碼正在通過{ControllerName/ActionMethodName}向該MVC控制器發出ajax請求。我在我的global.asax文件多條路線:單獨的MVC和webAPI控制器路由

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

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 
routes.MapHttpRoute(
    name: "ActionRoute", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 
routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

下面是我的ReportServiceBaseController

protected virtual ReportServiceBase CreateReportService(); 

[HttpPost] 
public JsonResult LoadDocumentInfo(LoadDocumentInfoRequest request); 

[HttpPost] 
public JsonResult LoadDocumentMapInfo(LoadDocumentMapInfoRequest request); 

[HttpPost] 
public JsonResult LoadDocumentMapInfoFull(LoadDocumentMapInfoFullRequest request); 

[HttpPost] 
public JsonResult LoadPageInfo(LoadPageInfoRequest request); 

我繼承該控制器在ReportService控制器:

public class ReportServiceController : ReportServiceBaseController 
{ 
    protected override PerpetuumSoft.Reporting.WebViewer.Server.ReportServiceBase CreateReportService() 
    { 
     return new ServiceClass(); 
    } 

}  

客戶端URL這正在提出要求:

的 「http://」 +主機+ 「/ ReportService的/ LoadDocumentInfo」

我認爲的WebAPI路由抑制MVC控制器的路線。我怎樣才能將MVC控制器路由從WebApi路由中分離出來?

+0

,你能否告訴我們您認爲此路由被抑制請求URL(一般他們的方式創建的路線是防止通過'api'抑制部分在URL中)。 – tpeczek 2013-03-13 11:07:45

+0

我用編碼編輯了問題。 – user1557847 2013-03-13 11:31:39

回答

0

您可以在App_Start內創建一個新的WebApi配置類,ApiRouteConfig.cs

namespace Mvc4App 
{ 
    public class ApiRouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.MapHttpRoute(
       name: "ActionRoute", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 
    }  
} 

然後,編輯Global.asax.cs,調用ApiRouteConfig.RegisterRoutes(RouteTable.Routes);

+0

感謝您的答覆。我已經完成了與您所解釋的相同的事情,但仍然無法正常工作。首先我註冊了API路由,然後是MapRoute。如果我先註冊MapRoute,那麼我無法調用API方法。請幫助。 – user1557847 2013-03-13 13:36:29