thisチュートリアルを使用してWeb APIを作成しています。私はこのAPIをPostman
で実行しています。 GET、PUT、DELETEメソッドは完璧に動作しますが、POSTメソッドを使用しようとすると動作しないため、例外が発生します。要求Web APIに一致する複数のアクションが見つかりましたasp.net
{ "Message": "An error has occurred.", "ExceptionMessage": "Multiple actions were found that match the request: \r\nPostProduct on type ProductStoreApi.Controllers.ProductController\r\nPostProducts on type ProductStoreApi.Controllers.ProductController", "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 cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()" }
更新1
ポスト方法
public Product PostProduct(Product item)
{
item = repository.Add(item);
return item;
}
public HttpResponseMessage PostProducts(Product item)
{
item = repository.Add(item);
var response = Request.CreateResponse(HttpStatusCode.Created, item);
string uri = Url.Link("DefaultApi", new { id = item.Id });
response.Headers.Location = new Uri(uri);
return response;
}
注: - チュートリアルで両方の上記の方法、すなわちPostProduct
同じ名前を持っています。しかし、私が同じ名前を書こうとすると、私はいつもエラーになります。
ルート
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
私はその上の多くの記事を検索しましたが、完璧な解決策を見つけることができませんでした。
ご協力いただければ幸いです。あなたはチュートリアルのPostProduct
方法誤解している
コントローラコードは表示できますか? –
@MatJは質問を更新しました – faisal1208
チュートリアルには「PostProduct」が1つしかありません。第2は単に最初のものへの更新です。 –