微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何注册apicontroller和控制器路由

如何解决如何注册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 举报,一经查实,本站将立刻删除。