Web API 2路由属性不起作用?

时间:2016-02-01 20:35:24

标签: c# routes asp.net-web-api2 custom-routes .net-4.5.2

好的,我花了一整天时间查看这段代码,无法弄清楚我做错了什么。

这是.NET 4.5.2上的Web API 2 这是我的Global.asax.cs

public class WebApiApplication : HttpApplication
{
    protected void Application_Start()
    {
        new AutoFacContainer(GlobalConfiguration.Configuration, Assembly.GetExecutingAssembly());
        GlobalConfiguration.Configuration.Services.Replace(typeof (IHttpControllerSelector),
            new VersionHttpControllerSelector(GlobalConfiguration.Configuration));
        GlobalConfiguration.Configure(WebApiConfig.Register);
        GlobalConfiguration.Configure(WebApiFilter.Register);
    }
}
  • 我正在使用AutoFac进行DI,这是有效的。
  • 我已经覆盖了ControllerSelector以允许通过Controller文件夹中的子文件夹进行版本控制。 <<是的,这实际上正在运作
  • 然后我打电话去做路线登记处(见下文)
  • 最后我打电话来添加一些自定义过滤器,也有效。

这是我的WebApi.Config

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

    }
}

我只想使用路由属性,所以我没有配置任何手动路由。

最后,这是我的'默认控制器'

[RoutePrefix("test")]
public class DefaultController : WebApiBaseController
{
    [HttpGet]
    [Route("")]
    public virtual IHttpActionResult GetRoot()
    {
        return Ok("This is Version1 of GetRoot");
    }

    [HttpGet]
    [Route("{test/{id:int}", Order = 1)]
    public virtual IHttpActionResult GetTest(int id)
    {
        return Ok("This is Test1 in Version1");
    }
}

以下是我得到的结果: Root Call Test Action Call 如果我重新添加手动路由,它可以工作,但这意味着路由属性不能正常工作。那么我错过了什么?

0 个答案:

没有答案