WebAPI .NET - POST 按参数请求过滤器

WebAPI .NET - POST request filter by parameters

我使用 POST 创建 消息 并更新它们(我需要使用 POST,而不是 PUT)。 API 有以下说明:

POST /api/message

POST /api/message?update_message

如何区分两者?猜猜我必须在函数中做一个 if

[HttpPost]
[Route("api/message")]
public async Task<HttpResponseMessage> Handle()
{}

检查请求是否包含参数update_message。

知道如何解决这个问题吗?谢谢。

一个查询字符串参数有一个键和一个值。您应该向 "update_message" 参数添加一个值,并使用它来决定是创建还是更新消息。 在路由属性中,您可以定义查询字符串参数。

[HttpPost, Route("api/message/{update_message=update_message}")]
public async Task<HttpResponseMessage> Handle(string update_message)
{
     if(string.Equals("true", update_message)
     { 
          // update
     }
     else
     {
         //create
     }  
}

最终通过以下语法分隔两个操作解决了问题:

对于 POST /api/message?update_message=true 个请求:

[HttpPost]
[Route("api/message")]
public async Task<HttpResponseMessage> Update(bool update_message, [FromBody] message m)
{}

对于 POST /api/message 个请求:

[HttpPost]
[Route("api/message")]
public async Task<HttpResponseMessage> Create()
{}