406(不可接受)消息从服务返回

问题描述 投票:0回答:2

我正在研究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)消息。

asp.net aspnetboilerplate asp.net-boilerplate
2个回答
0
投票

这并不罕见,你有错误406 Not Acceptable因为你在Accept-CharsetAccept-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"可能不正确。


0
投票

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

建议;

据我说,你应该检查异常投掷者动作的结果类型。如果始终发送json结果,则可能会忽略其他返回类型。 ABP有UserFriendlyException这是整洁的!你为什么不用它?

© www.soinside.com 2019 - 2024. All rights reserved.