Web API Filter ActionFilterAttribute 使用


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM