【ASP.Net】HttpResponse异常处理
异常处理
为了便于开发人员定位http错误,也为了向客户端显示更加友好的http错误信息,你可以手动定义http异常信息,这样可以把友好的异常信息响应给客户端,也可以定义一个http异常过滤器,异常过滤器应从ExceptionFilterAttribute派生。
手动定义http异常
手动定义http异常,使用这种方式必须注意,WEB API的Http异常机制是最早开始执行的,像下面这种由开发人员编写的异常抛出逻辑是后来才执行的,也即,如果一个明显的Http异常被WEB API的异常机制捕获,比如发起请求的客户端并未提供category参数,那么以下代码的测试逻辑根本不会执行,因为未提供category参数的异常已经在手动测试的代码执行前被执行,如果没有明显的异常被WEB API捕获,则以下测试category参数的值是否在两个值的范围之内的代码逻辑才会得到执行。
public HttpResponseMessage GetProductCategory( string category )
{
HttpResponseMessage httpResponseMessage = null;
if (!category.Contains( "图书" ) || !category.Contains( "音乐" ))
{
httpResponseMessage = Request.CreateResponse( HttpStatusCode.NotFound, JsonConvert.SerializeObject( new { msg = "提供的参数值不在可查询范围之内" } ) );
//CreateResponse方法会自动将参数2提供的value序列化为json格式:message:value
//httpResponseMessage = Request.CreateResponse( HttpStatusCode.NotFound, "提供的参数值不在可查询范围之内" );
}
else
{
var list = productRepository.GetAll( ).Where( p => p.Category == category );
httpResponseMessage = Request.CreateResponse( HttpStatusCode.OK, JsonConvert.SerializeObject( list ) );
}
return httpResponseMessage;
}
{
HttpResponseMessage httpResponseMessage = null;
if (!category.Contains( "图书" ) || !category.Contains( "音乐" ))
{
httpResponseMessage = Request.CreateResponse( HttpStatusCode.NotFound, JsonConvert.SerializeObject( new { msg = "提供的参数值不在可查询范围之内" } ) );
//CreateResponse方法会自动将参数2提供的value序列化为json格式:message:value
//httpResponseMessage = Request.CreateResponse( HttpStatusCode.NotFound, "提供的参数值不在可查询范围之内" );
}
else
{
var list = productRepository.GetAll( ).Where( p => p.Category == category );
httpResponseMessage = Request.CreateResponse( HttpStatusCode.OK, JsonConvert.SerializeObject( list ) );
}
return httpResponseMessage;
}
定义全局异常过滤器
你可以直接将异常过滤器应用在api控制器或api控制器的action方法上,但是,如果你创建API项目时勾选了MVC,那么过滤器先必须注册在WebApiConfig.cs中,否则无效。单经过我的测试,自定义的Http异常过滤器无效,下断点不会进入,原因不明。
namespace API
{
public static class WebApiConfig
{
public static void Register( HttpConfiguration config )
{
config.Filters.Add( new API.App_Start.HttpErrorFilterAttribute( ) );
}
}
}
{
public static class WebApiConfig
{
public static void Register( HttpConfiguration config )
{
config.Filters.Add( new API.App_Start.HttpErrorFilterAttribute( ) );
}
}
}

浙公网安备 33010602011771号