我正在研究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)消息。
这并不罕见,你有错误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"
可能不正确。
JSON文本的MIME媒体类型是application/json
。所以改变内容类型。
建议;
据我说,你应该检查异常投掷者动作的结果类型。如果始终发送json结果,则可能会忽略其他返回类型。 ABP有UserFriendlyException
这是整洁的!你为什么不用它?