【发布时间】:2016-03-22 10:53:54
【问题描述】:
我在我的 MVC 项目中使用 WebAPI,我遇到了 API 路由由 MVC 路由处理的问题。我可以通过更改路由注册的顺序来解决这个问题,例如:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
// Register API routes first
WebApiConfig.Register(GlobalConfiguration.Configuration);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
但我想知道是否可以通过IgnoreRoute() 方法做到这一点,我试过了:
routes.IgnoreRoute("api/{controller}/{*folder}");
但我收到了一个404 回复,这似乎表明该请求仍由 MVC 路由处理,而不是像以前那样由 WebAPI 处理。
这是我的 API 路由:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{folder}",
defaults: new { folder = RouteParameter.Optional }
);
添加了 MVC 路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Info", action = "Index", id = UrlParameter.Optional }
);
【问题讨论】:
-
显示你的 mvc 路由配置。您可能在那里有一条与您的 api 路线匹配的路线
-
我通常在 mvc 路由之前添加我的 web api 路由
-
@Nkosi 编辑添加,但是我已经知道了,我正在寻找一种方法来防止它被
IgnoreRoutes()方法匹配。 -
routes.IgnoreRoute("api/{*any}");还不够吗? -
引入一个自定义约束,表示控制器名称不能是
api。 asp.net/mvc/overview/older-versions-1/controllers-and-routing/…
标签: c# asp.net-mvc asp.net-web-api routing