【问题标题】:HttpResponseMessage StringContent replacing message contentHttpResponseMessage StringContent 替换消息内容
【发布时间】:2015-03-03 08:09:32
【问题描述】:

我正在尝试使用 HttpResponseMessage 返回一条错误消息,而我得到的只是我假设的 StringContent.ToString()。这是我的代码:

HttpResponseMessage response = new HttpResponseMessage();

if (request.Error != null)
{
    response.Content = new StringContent(request.Error.Message);
    response.Content.Headers.ContentType = new MediaTypeHeaderValue(ContentTypes.PlainText);
    response.StatusCode = request.Error.StatusCode;
}
else
{
    response.Content = new ByteArrayContent(request.PhotoAsJpeg());
    response.Content.Headers.ContentType = new MediaTypeHeaderValue(ContentTypes.Jpeg);
    response.StatusCode = HttpStatusCode.OK;
}

错误状态代码是 401、404 等,消息是纯文本,如“找不到照片”或“错误参数”。我的期望是,当出现错误时,状态码(401 等)和纯文本错误消息的响应。我收到的是带有状态代码 200 和以下内容的 HTML 响应:

StatusCode:400,ReasonPhrase:'Bad Request',版本:1.1,内容:System.Net.Http.StringContent,标头:{ Content-Type:text/plain }

如何获得包含我的错误消息的响应?

【问题讨论】:

  • 收到HttpResponseMessage 的客户端代码是什么样的?对我来说,当我在服务器端执行response.Content = new StringContent(request.Error.Message); 时,我可以在客户端执行以下操作var message = await response.Content.ReadAsStringAsync();

标签: c# asp.net-mvc


【解决方案1】:

您必须将Response.StatusCode 添加到请求管道中:

response.StatusCode = request.Error.StatusCode;
Response.StatusCode = request.Error.StatusCode;

否则,框架假定 200 OK。

【讨论】:

  • 我添加了该行,现在它正确发送了 401 等。但是,它仍然没有显示我将内容设置为的消息;我仍然得到的是信息而不是我想要的消息。
【解决方案2】:

请将此代码块用于错误部分。

if (request.Error != null)
{
   response.ReasonPhrase= request.Error.Message;
   response.StatusCode = HttpStatusCode.BadRequest;
}

我可以看到这样的响应。

StatusCode:400,ReasonPhrase:'Bad Msg',版本:1.1,内容:,标题:{ }

【讨论】:

  • 这和我上面的一样。最终用户不需要看到这个,他们想要的只是一个简单的错误消息。他们不需要版本或标题或类似的东西。错误消息应该是响应的内容,而不是原因短语。
猜你喜欢
  • 2013-04-02
  • 1970-01-01
  • 2021-10-31
  • 2022-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多