0

我試圖創建帶有多個post操作的web api。在同一個控制器中的多個post方法

我有2次職位的行動

[HttpPost] 
    [ActionName("Search")] 
    public HttpResponseMessage Search(string value) 
    { 
     return null; 
    } 

    [HttpPost] 
    public HttpResponseMessage Post([FromBody]CreateModel app) 
    { 
     return null; 
    } 

和航線webApiConfig文件中定義:

 config.Routes.MapHttpRoute(
      name: "ActionApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

與POST/API /控制器打中立柱,/ API /控制器/搜索返回404 - 未找到

有人可以幫忙嗎?

回答

0

對我來說,它看起來像路線是混亂的計劃,由於以下原因,明白了:

當您發送POST請求/ API /控制器/搜索 - 程序混亂就去哪: 1)API/{controller}/{action} as {id}在這裏是可選的 或 2)api/{controller}/{id}

兩者都具有相同的路由結構。因此,對於您給定的示例,有2種可能的路線重定向方式,並且會將您帶到404上。

您的路線必須過濾到一條獨特路徑,我相信您需要在此處更改路線。

1

在同一個控制器中進行多個POST操作並沒有什麼錯誤,並且您已經清楚地區分了它們。

您遇到的問題在於您如何定義路線。您可以觀察到兩個操作都沒有通過名稱'id'的參數,但是您在路由中描述了它們。

首先,請從您的路線id參數的提說,例如

config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}", 
     defaults: new { action = RouteParameter.Optional } 
    ); 

理想的情況下,這應該帶你到POST方法,並在情況下,如果你在你的URL添加/搜索應該帶你去搜索方法。

此外,您可以使用Web API Route Debugger Nuget package來幫助您確定路線匹配的發生過程以及路線的正確性。

1

您可以使用attribute routing

首先,在你WebApiConfig.cs,加

config.MapHttpAttributeRoutes(); 

然後定義路線作爲路線字符串屬性ontop的方法,因爲這

[HttpPost] 
[Route("api/controller/search")] 
public HttpResponseMessage Search(string value) 
{ 
    return null; 
} 

[HttpPost] 
[Route("api/controller/create")] 
public HttpResponseMessage CreateModel([FromBody]CreateModel app) 
{ 
    return null; 
} 

而且還搜索方法會更適合使用HTTP/GET。

相關問題