如何正确实现处理POST请求以检索URI参数和请求有效负载的.NET控制器方法?

时间:2018-11-22 10:20:21

标签: c# .net asp.net-mvc asp.net-apicontroller

我必须开发一个REST API,该API必须处理 POST 请求(从请求的正文中获取有效负载),并同时使用URI参数。

在我的控制器类中,我有这样的东西:

public class MailProtocolloController : ApiController
{
    [SharePointContextWebAPIFilter]
    [HttpPost]
    [ActionName("protocollo/mail")]
    public IHttpActionResult InviaAlProtocollo(XXX)
    {



        return Ok("TEST");
    }
}

我的问题是:

  1. 如您所见,我正在使用 ActionName 批注指定此控制器方法处理的URL路径。如何在此 ActionName 批注中指定URI参数? (我可以吗?)它必须处理以下内容: protocollo / mail / {id}

  2. 必须为此控制器方法指定哪些输入参数?一个用于从URI中检索到的ID(一个字符串)和一个用于请求有效负载的对象?还是可以在方法内部检索此有效载荷?

如何实现这种行为?

2 个答案:

答案 0 :(得分:1)

尝试一下:

public class MailProtocolloController : ApiController
{
    [SharePointContextWebAPIFilter]
    [HttpPost]
    [Route("protocollo/mail/{id}")]
    public IHttpActionResult InviaAlProtocollo([FromUri] string id, [FromBody] string context)
    {



        return Ok("TEST");
    }
}

答案 1 :(得分:1)

您可以使用RouteAttribute定义路由映射,在其中可以使用参数占位符从url路径获取那些占位符。

如果您用FromBody属性修饰代表正文的参数,也可以获取请求的正文:

[RoutePrefix("protocollo")]
public class MailProtocolloController : ApiController
{
    [SharePointContextWebAPIFilter]
    [HttpPost]
    [Route("mail/{id}")]
    public IHttpActionResult InviaAlProtocollo(string id, [FromBody]string body)
    {
        return Ok("TEST");
    }
}