【发布时间】:2014-06-20 18:58:47
【问题描述】:
我有一个简单的属性路由,包含三个不同的路径段:
[HttpGet]
[GET("v{version:int}/{category}/{service}")]
public async Task<HttpResponseMessage> RouteMessage(
string category, string service, int version = 1)
{
}
虽然路由在本地开发时有效,但当我将其部署到 IIS 服务器时它会失败 (404)。
失败的网址:
http://example.com/v1/search/products?client=test
我确定这不是 IIS 问题,因为我仍然可以使用非属性路由访问服务(请注意,即使 v1 不是 int,参数本身也有默认值):
http://example.com/api/route/?version=v1&category=search&service=products&client=test
我已经安装了Route Debugging,并且正如预期的那样,我的路由确实不匹配属性路由,即使它应该匹配。
应用程序的相对路径被列为~/v1/search/products,它应该与v{version}/{category}/{service} 的url 格式匹配(“版本”也正确地列出了一个int 路由约束)。
Here's an image 提供完整的调试信息,以防万一。
【问题讨论】:
-
您在 404 响应中看到任何错误详细信息吗?
-
我没有。这是一个通用的 404 页面,不是 Web api 响应:Server Error / 404 - File or directory not found。 / 您要查找的资源可能已被删除、名称已更改或暂时不可用。
-
您能分享一下您注册路线的顺序吗?
-
我使用的是 WebApi 提供的默认 MapHttpRoute。属性路由在 WebApi 路由之前添加了对 MapHttpAttributeRoutes 的调用,所以它应该先出现。我只有一个属性路由,就是上面列出的那个。我很确定我附上的图片也按顺序列出了路线。
-
我想澄清的是你是打电话给
config.Routes.MapHttpAttributeRoutes还是config.MapHttpAttributeRoutes...这是因为你似乎在使用AttributeRouting.Netnuget 包(基于你的@ 987654333@ 属性)而不是 Web API 的内置属性路由...所以如果您错误地调用config.MapHttpAttributeRoutes(属于 webapi),那么您的属性路由永远不会在路由表中创建,导致 404...i知道你提到它在本地工作,但我想先确定..
标签: c# asp.net-web-api attributerouting