【问题标题】:Routing for API in area MVC区域 MVC 中 API 的路由
【发布时间】:2020-04-05 10:06:07
【问题描述】:

我在 ASP.Net MVC 的区域中遇到路由 API 问题。我为 (Admin,Guest,SuperAdmin) 添加了许多区域,我想为每个用户添加 API,但我无法访问 API。

     // added this code in Admin Area
            public override void RegisterArea(AreaRegistrationContext context) 
            {
                context.MapRoute(
                    "Admin_default",
                    "Admin/{controller}/{action}/{id}",
                    new { action = "Index", id = UrlParameter.Optional }
                );
            }

    // added this code in SuperAdmin Area
       public override void RegisterArea(AreaRegistrationContext context) 
            {
            context.MapRoute(
                    "SuperAdmin_default",
                    "SuperAdmin/{controller}/{action}/{id}",
                    );
            }

    }

但我想使用代码作为 API,所以添加

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

            config.Routes.MapHttpRoute(
                "DefaultApi",
                "api/{controller}/{id}",
                new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
                "CustomApi",
                "api/{controller}/{action}/{id}",
                new { id = RouteParameter.Optional }
            );


            config.Routes.MapHttpRoute("SuperAdminDefaultApiGet", "Api/superadmin/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });


            config.Routes.MapHttpRoute("DefaultApiGet", "Api/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
            config.Routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new { action = "Post" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) });
        }
}

我在 SuperAdmin 和 Admin 中添加了两个具有相同名称的控制器

    [RoutePrefix("api/superAdmin/users")]
        public class SuperAdminController : ApiController
        {
            [Route("getUser")]
            [AllowAnonymous]
            public HttpResponseMessage getUser()
            {
            // code
            }
        }

    [RoutePrefix("api/admin/users")]
    public class AdminController : ApiController
    {
        [Route("getUser")]
        [AllowAnonymous]
        public HttpResponseMessage getUser()
        {
        // code
        }
    }

谁能帮我解决路由问题,或者通过Area MVC中路由API的文章支持我

【问题讨论】:

    标签: asp.net-mvc api area


    【解决方案1】:

    在注册任何 api 路由之前,将此代码添加到顶部的 webapi.config 中

    config.MapHttpAttributeRoutes();
    

    也可以在测试时暂时评论这一行

    config.Routes.MapHttpRoute("SuperAdminDefaultApiGet", "Api/superadmin/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
    
    
            config.Routes.MapHttpRoute("DefaultApiGet", "Api/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
            config.Routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new { action = "Post" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) });
    

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2015-06-24
      • 2011-08-07
      • 2012-08-30
      • 2010-12-09
      相关资源
      最近更新 更多