【问题标题】:Separate MVC and webAPI controller route分离 MVC 和 webAPI 控制器路由
【发布时间】:2013-03-13 10:57:22
【问题描述】:

我创建了一个 WebApi 项目,它有多个 WebApi 控制器。根据我的要求,我必须在我的 WebApi 项目中添加一个 MVC 控制器。我的客户端代码正在使用{ControllerName/ActionMethodName} 向该 MVC 控制器发出 ajax 请求。我的global.asax 文件中有多个路由:

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 Controller 路由与 WebApi 路由分开?

【问题讨论】:

  • 你能告诉我们你认为路由被抑制的请求 URL(通常他们创建路由的方式是防止通过 URL 中的api 部分抑制)。
  • 我已经用代码编辑了问题。

标签: asp.net-mvc routes asp.net-web-api


【解决方案1】:

您可以在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);

【讨论】:

  • 感谢您的回复。我已经按照您的解释做了同样的事情。但它仍然无法正常工作。首先我注册了 API 路由,然后是 MapRoute。如果我先注册 MapRoute,那么我无法调用 API 方法。请帮忙。
猜你喜欢
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2014-06-14
  • 2014-09-12
  • 2014-08-06
  • 1970-01-01
相关资源
最近更新 更多