2016-11-25 62 views
1

我有一個WebApi爲我的路由拋出404錯誤的問題。的控制器的一個例子是:WebAPI屬性路由不能在OWIN中工作

[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 
    } 
} 

GET請求https://api.testdomain.com/test/categories/hellohttps://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 
    } 

global.asax包含:

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等中的代碼)與工作項目相同。

我正在轉圈,所以任何幫助感激地收到。

+0

哪裏是在'Register'方法的默認路由?有些內容像'config.Routes.MapHttpRoute(name:「DefaultApi」,routeTemplate:「api/{controller}/{id}」,默認值:new {id = RouteParameter.Optional}); ' –

+0

您有沒有將ExtensionlessUrlHandler添加到web.config中的處理程序部分?這裏有一個例子:http://stackoverflow.com/questions/9703090/http-404-page-not-found-in-web-api-hosted-in-iis-7-5 – Schadensbegrenzer

+0

@RaviA。它使用的是屬性路由,所以不需要你寫的默認路由 – Graham

回答

0

您正在使用IIS和OWIN混合配置HttpConfiguration對象。它是一個或另一個。使用兩者都會導致衝突。

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); 
    } 
} 

Startup.cs

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); 
}