【发布时间】:2017-04-09 14:02:50
【问题描述】:
我遇到了 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 的GET 请求都抛出404 Not Found 错误。该应用程序在 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}", defaults: new { id = RouteParameter.Optional }); -
您是否已将 ExtensionlessUrlHandler 添加到 web.config 中的处理程序部分?这是一个示例:stackoverflow.com/questions/9703090/…
-
@RaviA。它使用属性路由,所以不需要你写的默认路由
-
我的坏人没有仔细查看 URL。所以这可以在带有 IIS Express 的 Visual Studio 中按预期工作吗?您也可以尝试从 startup.cs 中删除这一行
WebApiConfig.Register(config);,因为您已经在global.asax中这样做了 -
@Schadensbegrenzer ExtensionlessUrlHandler 已添加
标签: asp.net asp.net-web-api asp.net-web-api2 owin