MapHttpAttributeRoutes不使用区域 - 每条路线404s

时间:2016-05-11 06:45:21

标签: c# asp.net-web-api

我完全坚持这一点 - 在评论几乎所有与启动配置有关的事情后,只留下以下内容,我仍然无法让WebApi属性路由正常工作。

我有以下Global.asax.cs:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

以下控制器 - 位于名为“v2”的区域:

[RoutePrefix("v2/businesses")]
public class BusinessesController : ApiController
{
    // GET: v2/businesses/{id}
    [HttpGet]
    [Route("{id:int}")]
    public ApiResponse<ApiBusiness> Index(int id)
    {

        return new ApiResponse<ApiBusiness>(new ApiBusiness());

    }
}

以下区域注册:

public class V2AreaRegistration : AreaRegistration 
{
    public override string AreaName 
    {
        get 
        {
            return "v2";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.Routes.MapMvcAttributeRoutes();
    }
}

以下WebApiConfig:

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

当我尝试访问端点网址businesses/1v2/businesses/1v2/v2/businesses/1时,所有三个都返回404,我确信其中一个是正确的。

请注意,“v2”区域之外的其他控制器可以正常工作:

[RoutePrefix("abc")]
public class TestingController : ApiController
{
    [HttpGet]
    [Route("123")]
    public int Test()
    {
        return 2;
    }
}

当我访问该端点(abc/123)时,肯定会返回2。

有谁可以解释为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

在这种情况下,你说“v2”既是mvc路由又是web api路由;他们无法共存。 我的意思是,他们可以,但这里发生的事情是,对Web API的请求将被错误地处理,就好像它们是MVC动作一样。这就是你得到404的原因。

简而言之,Web API并不真正支持区域。您可以在此处尝试在 mvc路由之前注册web api路由,或使用nil显式处理Web api rounting。例如:

MapHttpRoute

检查specifications SO答案以获取更多详情!