【问题标题】:ASP.NET Web API not returning custom error informationASP.NET Web API 不返回自定义错误信息
【发布时间】:2017-09-25 16:28:27
【问题描述】:

我有一个 ASP.NET Web API 2 操作方法:

[System.Web.Http.HttpPost]
public HttpResponseMessage Create(HttpRequestMessage req)
{
   //...

   if (success)
      return Request.CreateResponse(HttpStatusCode.Created);

   return CreateErrorResponse(HttpStatusCode.BadRequest, "you done bad");
}

直到我做了“某事”,出错时它会返回 http 400,并带有自定义错误文本“你做得不好”。这是预期的结果。

它不再返回自定义文本;它只是返回标准的“错误请求”。 一直试图了解发生了什么变化。

所以我尝试了:

var response = new { message = "you done bad" };
return Request.CreateResponse(HttpStatusCode.BadRequest, response);

同样的结果。

然后我创建了一个新的、干净的 Web API 项目,我得到了我期望的结果。

我是如何破坏我的项目的?

【问题讨论】:

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


    【解决方案1】:

    你需要改变你的方法如下

        [Route("User/GetUserIDCustomMessage")]
        [HttpPost]
        public HttpResponseMessage GetUserIDCustomMessage(HttpRequestMessage request, int Id)
        {
            HttpResponseMessage response = null;
            if (Id == 1)
            {
                response = request.CreateResponse(HttpStatusCode.OK);
            }
            else {
    
                response = request.CreateResponse(HttpStatusCode.BadRequest , "YOu type bad");
    
            }
            return response;
        }
    

    当我给 1 时,它会给我带有 200 状态码的 OK 消息,否则它会给我 400/Bad Request ,正文消息“你输入错误”

    【讨论】:

    • 这给出了相同的结果 - 我仍然有问题。您的代码在功能上与我的相同。您的 CreateResponse 也会返回一个 HttpResponseMessage。
    • 我同意 - “它适用于 您的 机器”。但是您的代码在功能上与我的代码相同,而我的代码对我不起作用。无论如何,我找到了问题并在上面发布了答案。
    • 没关系,谢谢你的回答 :) 快乐编码
    【解决方案2】:

    我认为您可能可以考虑创建HttpResponseMessage 的实例并将您的自定义错误消息添加到其Content 属性。

    HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.BadRequest);
    msg.Content = new StringContent("you done bad");
    return msg;
    // or can re-throw it
    //throw new HttpResponseException(msg);
    

    详情请查看以下链接

    https://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage(v=vs.118).aspx

    【讨论】:

      【解决方案3】:

      问题与 web.config 中的 CustomErrors 配置有关。来自@HaukurHaf 在Error messages returned from Web API method are omitted in non-dev environment 的回答:

      有同样的问题。这确实是因为自定义错误设置。

      在现实世界的场景中,您肯定希望使用自定义 应用程序中的错误页面,但为了自定义异常 要在 WebAPI 中工作的消息,您需要禁用自定义错误 页面。

      如何解决这个问题?幸运的是,您可以在您的 web.config 来解决这个问题。

      解决方案:

       <!-- General for the application -->
        <system.web>
          <customErrors mode="RemoteOnly" defaultRedirect="YourCustomErrorPage.aspx"/>
        </system.web>
      
        <!-- Override it for paths starting with api (your WebAPI) -->
        <location path="api">
           <system.web>
              <customErrors mode="Off" />
           </system.web>
        </location>
      

      我在自己的应用中使用这种方法,效果很好。

      虽然我确实看到这行得通,但我不明白为什么 CustomErrors 部分会破坏它。

      【讨论】:

        猜你喜欢
        • 2021-10-19
        • 1970-01-01
        • 2021-11-27
        • 2013-04-21
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        • 2014-05-01
        • 2012-08-20
        相关资源
        最近更新 更多