Asp.net WebAPI属性路由在OWIN中不起作用
我有一个问题,WebApi抛出404错误为我的路线。控制器的一个示例是: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([
[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