我有一个Web,其中有许多函数以JSON的形式返回对象,例如:
[HttpGet]
public userDTO User(int id)
{
return dal.GetUser(id);
}
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
}如何实现错误处理?如果发生错误,我想返回一个JSON,只需说{“错误”:“出了问题”}
现在,如果有东西崩溃,API只返回500个错误。
发布于 2016-05-23 12:03:30
您最好的选择是实现自定义ExceptionHandler。
public class MyCustomExceptionHandler : ExceptionHandler
{
private readonly HttpConfiguration _configuration;
public MyCustomExceptionHandler(HttpConfiguration config){
_configuration = config;
}
public override void Handle(ExceptionHandlerContext context)
{
var formatters = _configuration.Formatters;
var negotiator = _configuration.Services.GetContentNegotiator();
context.Result = new NegotiatedContentResult<ErrorResponse>(HttpStatusCode.InternalServerError, new ErrorResponse
{
Message = context.Exception.Message,
CustomProperty = "Something"
}, negotiator, context.Request, formatters);
}
public override bool ShouldHandle(ExceptionHandlerContext context)
{
return true; //your logic if you want only certain exception to be handled
}
}
internal class ErrorResponse
{
public string Message { get; set; }
public string CustomProperty { get; set; }
}并在您的WebApiConfig.cs文件中注册它:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Services.Replace(typeof (IExceptionHandler), new MyCustomExceptionHandler(config));
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
}这样,在出现未处理异常的情况下,可以对返回的错误消息进行分级定制。
https://stackoverflow.com/questions/37386040
复制相似问题