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 Code2、在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上尋求自己的答案。