如何在 Web API 中将 HttpResponse 设置为 HttpResponseMessage

Posted

技术标签:

【中文标题】如何在 Web API 中将 HttpResponse 设置为 HttpResponseMessage【英文标题】:How to set HttpResponse to HttpResponseMessage in Web API 【发布时间】:2017-06-28 14:07:05 【问题描述】:

我有一个使用 OWIN 托管的 asp.net web API 应用程序。 Web API 应用程序使用依赖于System.Web 的外部库并将其响应写入 System.Web.Response 对象。我已经将一个虚拟对象设置为HttpContext.Current,之后我希望外部库会将响应设置为HttpRequest。然后我需要知道如何将结果从HttpRequest 传输到HttpRequestMessage,以便网络API 方法可以处理结果。

这里是一些示例代码:

public HttpResponseMessage GetTest()

    HttpResponseMessage responseMessage = new HttpResponseMessage();

    HttpResponse httpResponse = new HttpResponse(new StreamWriter(new MemoryStream()));
    httpResponse.Write("From HttpResponse");

    return responseMessage;

我已经使用HttpResponse.Write() 方法编写了一些文本,现在我需要将结果从HttpResponse 移动到HttpResponseMessage

【问题讨论】:

您可能需要发布一些代码。 可能只有我......我仍然无法得到你想要的东西。在您的问题中,您谈到将结果从 Request 传输到 HttpResponseMessage。 结果“From HttpResponse”设置在 HttpResponse 对象中,但是 web api 使用 HttpResponseMessage 来响应客户端。所以我需要知道如何从 HttpResponse 读取响应并将其设置为 HttpResponseMessage。 你在使用 MVC 吗? 如果需要,我们可以使用 MVC,但我们不能使用 System.Web,因为我们的应用程序是使用 OWIN 托管的,而不是托管在 IIS 中。 【参考方案1】:

我相信您正在寻找的是 IHttpActionResult 参见链接: https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action-results

这是一个如何创建 HttpResponseMessage 的示例:

public IHttpActionResult Get()

   HttpResponseMessage responseMessage = "From HttpResponse";
   return new ResponseMessageResult(responseMessage);

【讨论】:

【参考方案2】:

试试:

return Request.CreateResponse(HttpStatusCode.OK, "data to return here")

【讨论】:

显然如果请求失败,返回相应的状态码而不是“OK”【参考方案3】:

你可以尝试如下:

   if (yourCondition)  
     
      return Request.CreateResponse<Employee>(HttpStatusCode.OK, obj);  
     
   else  
     
      return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Not Found");  
     

【讨论】:

以上是关于如何在 Web API 中将 HttpResponse 设置为 HttpResponseMessage的主要内容,如果未能解决你的问题,请参考以下文章