我正在尝试使用MVC 6构建一个Web API。但是当我的一个控制器方法抛出一个错误时,响应的内容是一个格式很好的HTML页面,如果这是一个MVC应用程序,它将提供非常丰富的信息。但由于这是一个API,我宁愿返回一些JSON。
注意:我的设置现在是超级基本的,只需设置:
app.UseStaticFiles();
app.UseIdentity();
// Add MVC to the request pipeline.
app.UseMvc();
我想普遍地设置它。有没有“正确/最好”的方法在MVC 6中为API设置它?
...谢谢
答案 0 :(得分:13)
实现您的方案的一种方法是编写ExceptionFilter
并在该捕获中获取必要的详细信息,并将Result
设置为JsonResult
。
// Here I am creating an attribute so that you can use it on specific controllers/actions if you want to.
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
var exception = context.Exception;
context.Result = new JsonResult(/*Your POCO type having necessary details*/)
{
StatusCode = (int)HttpStatusCode.InternalServerError
};
}
}
您可以添加此异常过滤器以适用于所有控制器。 例如:
app.UseServices(services =>
{
services.AddMvc();
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new CustomExceptionFilterAttribute());
});
.....
}
请注意,此解决方案并未涵盖所有方案......例如,在格式化程序编写响应时抛出异常。