私たちはMVC4APIアプリケーションを開発していて、説明のない奇妙な問題に遭遇しました。
APIコントローラーには2つのメソッドがあります。
[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) ...
2つのメソッドのメソッドシグネチャは明らかに異なりますが、次のエラーメッセージが表示されます。
{"メッセージ": "エラーが発生しました。"、 "例外メッセージ": "リクエストに一致する複数のアクションが見つかりました:[XXX] .Models.ArtifactContent Post(System.String、System.String、System.String) on type [XXX] .API.ArtifactContentController \ r \ nSystem.Net.Http.HttpResponseMessage Get(System.String、System.String、System.String、ArtifactContentTypes)タイプ[XXX].API.ArtifactContentController"、" ExceptionType ":" System.InvalidOperationException "、" StackTrace ":" at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\ r \ n at System .Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\ r \ n at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext、CancellationToken cancelToken)\ r \ natSystem.Web.Http.Dispatcher.HttpControllerDispatcher。 SendAsyncInternal(HttpRequestMessage request、CancellationToken cancelToken)\ r \ n at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request、CancellationToken cancelToken) "}
これらの2つの変更のいずれかを行うことでエラーを回避できますが、2つの署名が明らかに異なる場合に、.NETがエラーをスローする理由を本当に知りたいです。
- メソッド
Get
AcceptVerbs
から属性を削除しますPost
Get
列挙型を整数として受け入れるようにメソッドのシグネチャを変更します