我有一个Web API,我想添加一些asp.net页面来管理API的各个方面。
在WebApiConfig.cs文件中,我有几个路由,以下用作我捕获API的所有路径。
config.Routes.MapHttpRoute(name: "CatchAll",routeTemplate: "{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional });
我想添加一个以/ control为前缀的新部分,以推送到asp.net方面。为此,我已将以下内容添加到RouteConfig.cs
routes.MapRoute(
name: "Default",
url: "control/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后我添加了一个标准控制器,用于管理事物。
public class ManageController : Controller
{
public ActionResult Index()
{
return Content("Works");
}
}
当我在浏览器中访问/控制/管理时,我收到以下错误。
找不到与名为'control'
的控制器匹配的类型
看起来这条路线被完全绕过了,或者至多,api路线上的所有捕获都是捕获并给予优先权。有没有办法可以让请求捕获这条路线而无需创建单独的项目?
答案 0 :(得分:3)
注册顺序很重要 你需要注册
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "DefaultMVC",
url: "control/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
//..other routes.
}
}
之前的RouteConfig.cs
config.Routes.MapHttpRoute(name: "CatchAll",routeTemplate: "{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional });
在WebApiConfig.cs
文件中。
在您的情况下,/control/manage
网址由CatchAll
路由处理,从而将控制映射到控制器并管理操作
为了做到这一点,请按以下顺序在Global.asax中注册它们:
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);