WebApi 提供兩種過濾器的類型:安全
一、ActionFilterAttributeide
二、exceptionFilterAttributespa
兩個類都是抽象類,ActionFilter 主要實現執行請求方法體以前(覆蓋基類方法:OnActionExecuting),和以後的事件處理(覆蓋基類方法:OnActionExecuted)。exceptionFilter 主要實現出發異常方法(覆蓋基類方法:OnException)。設計
過濾器在實際項目中都會常用到,例如:日誌、安全驗證、全局錯誤處理等。日誌
下面寫一個小例子:code
一、新建ActionFilterAttribute:blog
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); } } }
二、在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); } }
之後會慢慢完善這篇文章,WebApi 的簡單的例子,網上也很多,可是設計深刻開發和實際應用的少之又少,這方面的書籍也很少,你們能夠上MSDN上尋求本身的答案。ip