2013-03-13 142 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