0

我正在研究 ASP.Net 样板服务项目。我想发送一个自定义异常。我实施了

    [AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
    public sealed class FriendlyError : ExceptionFilterAttribute, IExceptionFilter
    {
        private readonly HttpStatusCode StatusCode;

        public FriendlyError(HttpStatusCode statusCode = HttpStatusCode.InternalServerError)
        {
            StatusCode = statusCode;
        }

        public override void OnException(ExceptionContext context)
        {
            if (context.Exception == null) return;

            context.HttpContext.Response.StatusCode = (int)StatusCode;
            context.HttpContext.Response.ContentType = "multipart/form-data;application/json";

            context.Result = new JsonResult(CreateErrorResult(context.Exception), new JsonSerializerSettings
            {
                Formatting = Formatting.Indented,
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                ContractResolver =  new CamelCasePropertyNamesContractResolver()
            });
            base.OnException(context);
        }
}

处理异常,并将注释放在控制器端点上。但它向客户端发送 406 (Not Acceptable) 消息。

4

2 回答 2

0

这并不罕见,您收到错误406 Not Acceptable,因为您返回的错误不在定义的可接受值列表中,Accept-Charset并且Accept-Language

有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/406 。

我认为您需要添加以下内容:

context.HttpContext.Response.Charset = CharSet.Unicode;

context.HttpContext.Response.ContentType应根据响应类型设置,"multipart/form-data;application/json"每个请求的通用可能不正确。

于 2017-12-27T11:41:40.113 回答
0

JSON 文本的 MIME 媒体类型是application/json. 所以改变内容类型。

推荐

根据我的说法,您应该检查异常抛出操作的结果类型。如果您总是发送 json 结果,您可能会忽略其他返回类型。ABP 有UserFriendlyException哪一个是整洁的!你为什么不用那个?

于 2017-12-28T06:33:29.210 回答