我有一個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/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
}
我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
等中的代碼)與工作項目相同。
我正在轉圈,所以任何幫助感激地收到。
哪裏是在'Register'方法的默認路由?有些內容像'config.Routes.MapHttpRoute(name:「DefaultApi」,routeTemplate:「api/{controller}/{id}」,默認值:new {id = RouteParameter.Optional}); ' –
您有沒有將ExtensionlessUrlHandler添加到web.config中的處理程序部分?這裏有一個例子:http://stackoverflow.com/questions/9703090/http-404-page-not-found-in-web-api-hosted-in-iis-7-5 – Schadensbegrenzer
@RaviA。它使用的是屬性路由,所以不需要你寫的默認路由 – Graham