【问题标题】:How can I correctly implement a .NET controller method that handle POST request retrieving an URI parameter and the request payload? [duplicate]如何正确实现处理 POST 请求、检索 URI 参数和请求有效负载的 .NET 控制器方法? [复制]
【发布时间】:2018-11-22 19:00:53
【问题描述】:

我必须开发一个 REST 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(一个 string)和一个用于请求负载的对象?或者这个payload可以在方法内部获取?

如何实现这种行为?

【问题讨论】:

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


【解决方案1】:

试试这个:

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



        return Ok("TEST");
    }
}

【讨论】:

【解决方案2】:

您可以使用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");
    }
}

【讨论】:

  • 调用我的 API 我收到此错误:您要查找的资源已被删除、名称已更改或暂时不可用
  • 如何调用 API?您能否发送一个示例,因为您收到此回复的原因可能有很多。
  • 我正在调用这样的 URL(我的应用程序中必须使用 ? 参数):andrea-myapp.azurewebsites.net/api/MailProtocollo//protocollo/…
  • api/MailProtocollo/protocollo/mail/xxx 这是一条有效的路线吗?我假设您不需要 MailProtocollo url 部分,您的路线映射现在看起来如何?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 2016-01-27
  • 2011-09-11
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 2023-01-27
相关资源
最近更新 更多