【发布时间】:2013-01-29 20:15:52
【问题描述】:
我们正在开发一个 MVC4 API 应用程序并遇到了一个我们无法解释的奇怪问题。
API 控制器有两种方法:
[AllowAnonymous]
[AcceptVerbs("Post", "Get")]
public ArtifactContent Post(string userName, string password, string id) ...
和
[AllowAnonymous]
[AcceptVerbs("Get")]
public HttpResponseMessage Get(string userName, string password, string id, EnumType contentType) ...
虽然这两种方法显然具有不同的方法签名,但我们收到以下错误消息:
{"Message":"发生错误。","ExceptionMessage":"多个 找到与请求匹配的操作: [XXX].Models.ArtifactContent Post(System.String, System.String, System.String) 类型 [XXX].API.ArtifactContentController\r\nSystem.Net.Http.HttpResponseMessage Get(System.String, System.String, System.String, ArtifactContentTypes) 类型 [XXX].API.ArtifactContentController","ExceptionType":"System.InvalidOperationException","StackTrace":" 在 System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext 控制器上下文)\r\n 在 System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext 控制器上下文)\r\n 在 System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancelToken)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage 请求,CancellationToken cancelToken)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage 请求,CancellationToken cancelToken)"}
我们可以通过进行这两个更改之一来解决该错误,但我真的很想知道为什么当两个签名明确时.NET会抛出错误不同:
- 从
Post方法中删除GetAcceptVerbs属性 - 更改
Get方法的签名以接受 Enum 作为整数
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api