【问题标题】:Why does Asp.NET WebApi render an IIS error page in response using ExceptionFilter?为什么 Asp.NET WebApi 使用 ExceptionFilter 呈现 IIS 错误页面作为响应?
【发布时间】:2012-05-18 14:22:26
【问题描述】:

我有以下异常过滤器:

public class ServiceLayerExceptionFilter : ExceptionFilterAttribute
    {
        public override void OnException(HttpActionExecutedContext context)
        {
            if (context.Result == null)
            {
                context.Result = new HttpResponseMessage();
            }

            context.Result.StatusCode = context.Exception.ConvertToHttpStatus();   
            base.OnException(context);
        }
    }

我的 ConvertToHttpStatus() 只是一个扩展,它查找映射到 HttpStatusCodes 的异常类型的 Dictionary 对象。 http 状态码正在正确转换。但是在响应负载中,我得到一个 IIS 错误页面。最好我想让响应为空,或者更好地将异常消息作为 json 传递。有谁知道我为什么返回 IIS 错误页面以及如何返回空内容或有效内容?

【问题讨论】:

  • Accept 标头是什么?是beta 还是nightly build
  • 它是使用 NuGet 包的 beta 版本。请求中的接受标头为:Accept:*/*
  • 那么问题出在哪里?您正在接受所有内容,系统会向您发送 HTML。使用 accept:application/json 应该会向您发送 JSON 响应。
  • 在过滤器中添加了这一行:context.Result.Headers.Add("Accept","application/json");但这没有效果。仍然在响应负载中从 IIS 获取堆栈跟踪...不确定这是否是错误。

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


【解决方案1】:

您没有向您创建的 HTTP 响应消息写入任何内容。尝试添加一些内容:

public class ServiceLayerExceptionFilter : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext context)
    {
        var message = new HttpResponseMessage(HttpStatusCode.InternalServerError);
        message.CreateContent(typeof(Foo), new Foo { Bar = "baz" });
        context.Result = message;
    }
}

【讨论】:

  • 太好了,这正是我所缺少的!
猜你喜欢
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
相关资源
最近更新 更多