MVC区域中API的路由

时间:2020-04-05 10:06:07

标签: asp.net-mvc api area

我在ASP.Net MVC的Area中遇到路由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) });
        }
}

我在Admin中添加了两个具有相同名称的Controller

    [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的文章为我提供支持

1 个答案:

答案 0 :(得分:0)

在注册任何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) });