2017-09-19 40 views
0

我正在使用this教程創建Web API。我在Postman中運行此API。 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

POST方法

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 } 
     ); 

我已經搜索了很多文章,但無法找到完美的解決方案。

任何幫助將不勝感激。

+1

我們可以看到你的控制器代碼嗎? –

+0

@MatJ更新了問題 – faisal1208

+4

教程中只有一個'PostProduct' - 第二個只是對第一個的更新。 –

回答

2

你誤會本教程的PostProduct方法:

接下來,我們將添加一個方法到ProductsController類來創建一個 新產品。下面是一個簡單的方法實現:

// Not the final implementation! 
public Product PostProduct(Product item) 
{ 
    item = repository.Add(item); 
    return item; 
} 

請注意,這裏的代碼明確地提醒你,這是不是這種方法的最終實現

在本教程的後面,我們有:

的ASP.NET Web API可以輕鬆操作HTTP響應消息。 這裏是提高執行

public HttpResponseMessage PostProduct(Product item) 
{ 
    item = repository.Add(item); 
    var response = Request.CreateResponse<Product>(HttpStatusCode.Created, item); 

    string uri = Url.Link("DefaultApi", new { id = item.Id }); 
    response.Headers.Location = new Uri(uri); 
    return response; 
} 

(我的重點)

你要更換早期PostProduct方法與此改進執行。

+0

是的,我想知道教程。 :) – faisal1208