无法在Web Api 2中获取BadRequest的错误消息

时间:2015-01-20 07:11:08

标签: asp.net-mvc asp.net-web-api asp.net-mvc-5

在我的一个方法中,我必须从Web API 2中返回IHttpActionResult。成功后,它返回Ok(),或者返回带有一些消息的BadRequest()。 我按以下方式设置BadRequest的消息。但问题是我无法从被调用的方法中检索错误消息。我使用的是Visual Studio 2013 Update 4,版本是MVC 5.

return BadRequest("Error!  Error adding the device");

请帮忙。提前谢谢。

3 个答案:

答案 0 :(得分:3)

通过研究和研究后,我找到了解决方案。由于这是Web API的一种方法,我通过我的网站调用它。我将它称为以下方式,其中RequestUrl是此Web API方法的URL。如果方法中有参数,我们必须用querystring编写它。

HttpResponseMessage Response = null;
Response = client.GetAsync(RequestUrl).Result;
var stream = Response.Content.ReadAsStreamAsync().Result;

// convert stream to string
StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();

我们也可以使用以下代码获得响应类型。

Response.ReasonPhrase

通过这种方式,我可以收到BadRequest以及Ok的讯息。 BINGO !!

答案 1 :(得分:1)

自定义错误页面也可能导致您的消息无法显示。如果您的web.config文件具有以下内容,请尝试将其删除,因为它会拦截您的400状态错误:如果您确实进行了以下更改existingResponse="ReplaceexistingResponse="PassThrough

<httpErrors existingResponse="Replace" errorMode="Custom">
  <remove statusCode="404" subStatusCode="-1"/>
  <error statusCode="404" prefixLanguageFilePath="" path="/myapppath/error404.aspx" responseMode="ExecuteURL"/>
</httpErrors

答案 2 :(得分:0)

您必须设置 ReasonPhrase 并包装 ResponseMessage 才能获得 IHttpActionResult:

return this.ResponseMessage(new HttpResponseMessage
        {
          StatusCode = HttpStatusCode.BadRequest,
          ReasonPhrase = ex.Message
        });