Web API Filter ActionFilterAttribute 使用,webapiactionfilter
WebApi 提供兩種過濾器的類型:
1、ActionFilterAttribute
2、exceptionFilterAttribute
兩個類都是抽象類,ActionFilter 主要實現執行請求方法體之前(覆蓋基類方法:OnActionExecuting),和之後的事件處理(覆蓋基類方法:OnActionExecuted)。exceptionFilter 主要實現出發異常方法(覆蓋基類方法:OnException)。
過濾器在實際項目中都會經常使用到,例如:日志、安全驗證、全局錯誤處理等。
下面寫一個小例子:
1、新建ActionFilterAttribute:

![]()
public class ActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
//獲取請求消息提數據
Stream stream = actionContext.Request.Content.ReadAsStreamAsync().Result;
Encoding encoding = Encoding.UTF8;
stream.Position = 0;
string responseData = "";
using (StreamReader reader = new StreamReader(stream, encoding))
{
responseData = reader.ReadToEnd().ToString();
}
//反序列化進行處理
var serialize = new JavaScriptSerializer();
var obj = serialize.Deserialize<RequestDTO>(responseData);
//在action執行前終止請求時,應該使用填充方法Response,將不返回action方法體。
if (obj == null)
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, obj);
if (string.IsNullOrEmpty(obj.PhoneType) || string.IsNullOrEmpty(obj.PhoneVersion)
|| string.IsNullOrEmpty(obj.PhoneID) || obj.StartCity < 1)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, obj);
}
}
}
View Code
2、在Api控制器的Action方法上加上[過濾器類],例如:[Filter.ActionFilter]

![]()
public class Mobile450Controller : ApiController
{
private DoWork450Invoke _DoWork = new DoWork450Invoke();
[Uzai.Mobile.Filter.ActionFilter]
[HttpPost]
public RepProductTopicsList GetRecmdProductTopicsList(ReqProductTopicsList reqDTO)
{
return _DoWork.GetRecmdProductTopicsList(reqDTO);
}
}
View Code
以後會慢慢完善這篇文章,WebApi 的簡單的例子,網上也不少,但是設計深入開發和實際應用的少之又少,這方面的書籍也不多,大家可以上MSDN上尋求自己的答案。