0

背后的故事是我有一个 Web api,它只是用作调用外部服务的网关。这样做的原因是我不想将真正的业务 API 暴露给外部服务。所以,在这个网关控制器中,它只是简单地接收来自业务 API 的信息,调用外部服务并将响应返回给客户端,也就是业务 API。在我的网关控制器中,我有一个带有 type 参数的 POST 操作,HttpContent如下所示:

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

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

4

1 回答 1

0

在任何控制器的处理程序中访问请求的内容是很自然的。就叫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或在处理程序名称前加上动词。

希望有帮助!

于 2017-08-31T11:39:29.383 回答