Asp.net WebAPI属性路由在OWIN中不起作用

Asp.net WebAPI属性路由在OWIN中不起作用,asp.net,asp.net-web-api,asp.net-web-api2,owin,Asp.net,Asp.net Web Api,Asp.net Web Api2,Owin,我有一个问题,WebApi抛出404错误为我的路线。控制器的一个示例是: [System.Web.Http.RoutePrefix("test/categories")] public class CategoriesController : ControllerBase { [System.Web.Http.Route("hello")] [HttpGet] [AcceptVerbs("GET")] public IHttpActionResult Get([

我有一个问题,WebApi抛出404错误为我的路线。控制器的一个示例是:

[System.Web.Http.RoutePrefix("test/categories")]
public class CategoriesController : ControllerBase
{

    [System.Web.Http.Route("hello")]
    [HttpGet]
    [AcceptVerbs("GET")]
    public IHttpActionResult Get([FromUri] QueryOptions options)
    {
        // Usual controller stuff happens here
    }

    [System.Web.Http.Route("{id:int}")]
    [HttpGet]
    [AcceptVerbs("GET")]
    public IHttpActionResult GetById(int id)
    {
        // Usual controller stuff happens here
    }
}
获取对
https://api.testdomain.com/test/categories/hello
https://api.testdomain.com/test/categories/1
两个都抛出404未找到错误。应用程序正在IIS(不是IIS Express)上运行。404是一个IIS 404,表示应用程序正在启动,但路由失败。我在
startup.cs
中附加了断点,它肯定被击中了

我的
startup.cs
文件包含:

    public void Configuration(IAppBuilder app)
    {            
        var config = new HttpConfiguration
        {
            IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always,
            DependencyResolver = new SimpleInjectorWebApiDependencyResolver(_container) // _container is a SimpleInjector IoC container; shouldn't affect things.
        };

        WebApiConfig.Register(config);

        app.UseCors(CorsOptions.AllowAll);
        app.UseWebApi(config); // Have tried commenting this out with no luck
    }
    protected void Application_Start(object sender, EventArgs e)
    {
        GlobalConfiguration.Configure(WebApiConfig.Register); // Have also tried commenting this out with no luck
    }
我的
global.asax
包含:

    public void Configuration(IAppBuilder app)
    {            
        var config = new HttpConfiguration
        {
            IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always,
            DependencyResolver = new SimpleInjectorWebApiDependencyResolver(_container) // _container is a SimpleInjector IoC container; shouldn't affect things.
        };

        WebApiConfig.Register(config);

        app.UseCors(CorsOptions.AllowAll);
        app.UseWebApi(config); // Have tried commenting this out with no luck
    }
    protected void Application_Start(object sender, EventArgs e)
    {
        GlobalConfiguration.Configure(WebApiConfig.Register); // Have also tried commenting this out with no luck
    }
WebApiConfig.cs
如下所示:

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

        config.Formatters.Add(new FilePropertyInfoMediaTypeFormatter());

    }
}
我已安装以下软件包:

<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net452" />

我不知道为什么路由不起作用。它是从其他项目移植的代码,方法(即
startup.cs
etc中的代码)与工作项目相同


我正在兜圈子,感谢您的帮助。

您将HttpConfiguration对象的配置与IIS和OWIN混为一谈。不是一个就是另一个。两者都使用会导致冲突

WebApiConfig.cs

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

        config.Formatters.Add(new FilePropertyInfoMediaTypeFormatter());

        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

        config.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(_container);
    }
}
public class Startup {
    public void Configuration(IAppBuilder app) {  
        app.UseCors(CorsOptions.AllowAll);
    }
}
Startup.cs

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

        config.Formatters.Add(new FilePropertyInfoMediaTypeFormatter());

        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

        config.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(_container);
    }
}
public class Startup {
    public void Configuration(IAppBuilder app) {  
        app.UseCors(CorsOptions.AllowAll);
    }
}
Global.asax
保持不变

protected void Application_Start(object sender, EventArgs e) {
    GlobalConfiguration.Configure(WebApiConfig.Register);
}

您的
寄存器
方法中的默认路由在哪里?类似于
config.Routes.maphttroute(名称:“DefaultApi”,routeTemplate:“api/{controller}/{id}”,默认值:new{id=RouteParameter.Optional})是否已将ExtensionlessUrlHandler添加到web.config中的处理程序部分?这里有一个例子:@RaviA。它使用的是属性路由,所以您编写的默认路由是不需要的。那么,这在VisualStudio中与IIS Express一起工作是否如预期的那样?您还可以尝试删除这一行
WebApiConfig.Register(config)global.asax
@Schadensbegrenzer中执行此操作,因此已添加ExtensionlessUrlHandler