【问题标题】:Attribute Route with constraint works locally but fails when deployed带约束的属性路由在本地工作,但在部署时失败
【发布时间】: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.Net nuget 包(基于你的@ 987654333@ 属性)而不是 Web API 的内置属性路由...所以如果您错误地调用 config.MapHttpAttributeRoutes(属于 webapi),那么您的属性路由永远不会在路由表中创建,导致 404...i知道你提到它在本地工作,但我想先确定..

标签: c# asp.net-web-api attributerouting


【解决方案1】:

感谢@Kiran Challa,我意识到虽然相似,但内置的WebAPI attribute routingAttributeRouting.WebApi 不同。我切换到内置路由,现在一切正常。

【讨论】:

    猜你喜欢
    • 2019-12-15
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多