Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 独立的MVC和webAPI控制器路由_Asp.net Mvc_Routes_Asp.net Web Api - Fatal编程技术网

Asp.net mvc 独立的MVC和webAPI控制器路由

Asp.net mvc 独立的MVC和webAPI控制器路由,asp.net-mvc,routes,asp.net-web-api,Asp.net Mvc,Routes,Asp.net Web Api,我创建了一个WebApi项目,它有多个WebApi控制器。根据我的要求,我必须在我的WebApi项目中添加一个MVC控制器。我的客户端代码正在使用{ControllerName/ActionMethodName}向该MVC控制器发出ajax请求。我的global.asax文件中有多条路由: routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapHttpRoute( name: "DefaultApi", rout

我创建了一个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://“+hostName+”/ReportService/LoadDocumentInfo”


我认为WebApi路由正在抑制MVC控制器路由。如何将MVC控制器路由与WebApi路由分离?

您可以在
应用程序启动
中创建一个新的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.registeroutes(RouteTable.Routes)

您能告诉我们您认为路由已被抑制的请求URL吗(通常,创建路由的方式是通过URL中的
api
部分阻止抑制)。我用代码编辑了问题。谢谢你的回答。我做了与你解释的相同的事情。但仍然不起作用。首先我注册了API路由,然后是MapRoute。如果我先注册MapRoute,则无法调用API方法。请帮助。