Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有约束的属性路由在本地工作,但在部署时失败_C#_Asp.net Web Api_Attributerouting - Fatal编程技术网

C# 带有约束的属性路由在本地工作,但在部署时失败

C# 带有约束的属性路由在本地工作,但在部署时失败,c#,asp.net-web-api,attributerouting,C#,Asp.net Web Api,Attributerouting,我有一个带有三个不同路径段的简单属性路由: [HttpGet] [GET("v{version:int}/{category}/{service}")] public async Task<HttpResponseMessage> RouteMessage( string category, string service, int version = 1) { } 我确信这不是IIS问题,因为我仍然可以使用非属性路由访问服务(请注意,即使v1不是int,参数本身也有一个默认

我有一个带有三个不同路径段的简单属性路由:

[HttpGet]
[GET("v{version:int}/{category}/{service}")]
public async Task<HttpResponseMessage> RouteMessage(
    string category, string service, int version = 1)
{
}
我确信这不是IIS问题,因为我仍然可以使用非属性路由访问服务(请注意,即使
v1
不是int,参数本身也有一个默认值):

我已经安装了,正如预期的那样,我的路由与属性路由不匹配,即使它应该匹配

应用程序相对路径列为
~/v1/search/products
,它应该与url格式
v{version}/{category}/{service}
匹配(“version”也正确列出了int-route约束)

提供完整的调试信息,以备不时之需


多亏了@Kiran Challa,我意识到,尽管类似,但内置函数与
AttributeRouting.WebApi
不同。我切换到内置路由,现在一切正常。

您在404响应中看到任何错误详细信息吗?我没有。这是一个通用的404页面,不是web api响应:服务器错误/404-找不到文件或目录。/您正在查找的资源可能已被删除、名称已更改或暂时不可用。能否共享您注册路由的顺序?我使用的是WebApi提供的默认MapHttpRoute。属性路由在WebApi路由之前添加了对MapHttpAttributeRoutes的调用,因此它应该放在第一位。我只有一个属性路由,上面列出的那个。我很确定我附加的图像也按顺序列出了路由。我想澄清的是,您是在调用
config.routes.MapHttpAttributeRoutes
还是
config.MapHttpAttributeRoutes
…这是因为您似乎在使用
AttributeRouting.Net
nuget软件包(基于您的
GET
属性)而不是Web API的内置属性路由…因此,如果您错误地调用
config.maphttpAttribute路由
(属于webapi),则您的属性路由从未在路由表中创建,导致404…我知道您提到它在本地工作,但我想首先确保。。
http://example.com/v1/search/products?client=test
http://example.com/api/route/?version=v1&category=search&service=products&client=test