ASP.net WebApi找到了与URL匹配的多个控制器类型

时间:2016-04-14 11:16:45

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

我使用属性路由向我的WebApi添加了一个新的HttpPost路由“api / export / error /”,我收到一个错误:

  

找到了与URL匹配的多种控制器类型。如果多个控制器上的属性路由与请求的URL匹配,则会发生这种情况。\ r \ n \ r \ n请求已找到以下匹配的控制器类型:\ r \ nMyApp.Controllers.ExportErrorController \ r \ nMyApp.Controllers.ExportGeneratorController

但我在不同的控制器中没有相同的路线;这是这两个控制器中唯一的路由:

ExportErrorController.cs

[HttpGet] [Route( "api/export/error/total/" )]

[HttpGet] [Route( "api/export/error/channel/{channelId}/" )]

[HttpPost] [Route( "api/export/error/" )]

[HttpDelete] [Route( "api/export/error/{id}/" )]

[HttpPut] [Route( "api/export/error/clear/" )]

ExportGeneratorController.cs

[HttpGet] [Route( "api/2/export/{channelId}/" )]

[HttpPost] [Route( "api/2/export/generate-word/{debugInfo}/" )]

[HttpPost] [Route( "api/2/export/generate-excel/{debugInfo}/" )]

我看不到两个控制器之间有任何相同的地方

1 个答案:

答案 0 :(得分:3)

显然ASP.Net在确定使用路径时不会评估参数'types'或方法,因此它找到并匹配路由文本“error”作为'channelid'的潜在参数,即使它们是不同的方法。

向参数添加类型有助于它正确解决它: [Route( "api/2/export/{channelId}/" )]

通过将其更改为: [Route( "api/2/export/{channelId:int}/" )]