У меня проблема с тем, что 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 (имя:« 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