如何在 web api 中传递 HttpContent 类型的参数?

How can I pass parameter of type HttpContent in web api?

背景故事是我有一个 Web api,它只是用作调用外部服务的网关。这样做的原因是我不想将真正的业务 API 暴露给外部服务。因此,在这个网关控制器中,它只是简单地从业务 API 接收信息,调用外部服务并 returns 响应给客户端,即业务 API。 在我的网关控制器中,我有一个 POST 操作,该操作采用 HttpContent 类型的参数,如下所示:

[Route("api/test")]
    public void Test(HttpContent content)
    {
    }

但是网络 API 基础设施不知道如何序列化和反序列化 HttpContent 类型。有没有办法支持我的场景?谢谢

在任何控制器的处理程序中访问请求的内容是很自然的。里面调用Request.Content就行了。您不能将它作为参数,因为它不是像 URI 段那样的映射,也不是序列化的内容。

试试这样的东西:

using System.Net;
using System.Net.Http;

//  namespace + controller definition...

[Route("api/test")]
public HttpResponseMessage GetTest() //  This is a GET handler
{
    var myRequestContext = Request.Content;

    //  Do something with the content e.g
    if (!myRequestContext.IsMimeMultipartContent())
    {
        Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
    }
}

顺便说一句,假设您正在根据您所说的创建 REST API 控制器,请不要忘记指明此处理程序映射到的动词,方法是使用 [Http<REST_verb>] 属性 System.Web.Http 在处理程序上或在处理程序名称前加上动词。

希望对您有所帮助!