如何解决如何注册apicontroller和控制器路由
我需要对项目的所有基本控制器使用以下路径:
routes.MapRoute(
name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional }
);
以及所有apicontroller操作的以下路由:
config.Routes.MapHttpRoute(
name: "DefaultApi",routeTemplate: "{controller}/{id}",defaults: new { id = RouteParameter.Optional }
);
// Code that runs on application startup
AreaRegistration.RegisterallAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
如果我先注册WebApiConfig,则找不到所有控制器中的动作。 但是,如果我先注册RouteTable,则找不到apicontroller中的api端点。
这两种方式似乎都被另一种抹去了。
我错过了什么吗? 感谢您的帮助!
解决方法
正如Nkosi所建议的,我通过为API路由添加前缀来解决了冲突,例如:“ api / {controller} / {id}
,一个选择是创建一个不同的区域来处理API路由。
然后使用名称空间注册MVC路由,以避免与控制器名称冲突。
routes.MapRoute(
name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional },namespaces: new string[] { "MyApp.Controllers" }
);
您的API区域应按以下方式配置:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"API_default","{controller}/{id}",new { id = UrlParameter.Optional },new { controller = "DefaultControllerName" },new[] { "MyApp.Areas.Api.Controllers" }
);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。