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。

相关问题