我在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的文章为我提供支持
答案 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) });