日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

巧用ActionFilter的AOP特性,为返回的数据增加返回码和消息

發布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 巧用ActionFilter的AOP特性,为返回的数据增加返回码和消息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

對于處理接口返回值統一加密,過濾,特定值統一處理,統一返回等多種需求,net的攔截器前置攔截比較常用,例如:登錄校驗,參數格式校驗等等。接下來介紹filter。

filter過濾器實現

filter的ActionFilterAttribute可以做一定的處理,通過對OnActionExecuted的執行控制,來實現很多場景。ActionFilterAttribute類是C# ASP.net MVC中的過濾類,跟JAVA的Filter效果類似,但是Filter是接口。ActionFilterAttribute類是被abstract 修飾符修飾,表示該類只能是基類,也就是只能被繼承。ActionFilterAttribute類中只有一個無參數的構造函數和四個被protected 修飾符修飾,表示該方法只限于本類和子類訪問,實例不能訪問。

代碼實現

///?<summary>///?Service返回數據過濾器,為返回的數據增加返回碼和消息///?</summary>public?class?ReturnDataFilterAttribute?:?ActionFilterAttribute{private?static?JsonMediaTypeFormatter?_formatter;static?ReturnDataFilterAttribute(){_formatter?=?new?JsonMediaTypeFormatter();//設置序列化器為json序列化器//????????????_formatter.UseDataContractJsonSerializer?=?true;//設置時間格式為Local_formatter.SerializerSettings.DateTimeZoneHandling?=?Newtonsoft.Json.DateTimeZoneHandling.Local;_formatter.SerializerSettings.DateFormatString?=?"yyyy-MM-ddTHH:mm:ss.fffzz:00";//設置縮進_formatter.SerializerSettings.Formatting?=?Newtonsoft.Json.Formatting.Indented;//設置json格式為駝峰式_formatter.SerializerSettings.ContractResolver?=?new?CamelCasePropertyNamesContractResolver();}public?override?void?OnActionExecuted(HttpActionExecutedContext?actionExecutedContext){if?(actionExecutedContext.Response?!=?null){var?oldResponse?=?actionExecutedContext.Response;//response狀態為請求成功var?result?=?new?System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK);if?(ApiMatch(ConfigHelper.GetAppSetting("IgnoreReturnDataFilter"),actionExecutedContext.Request.RequestUri.AbsolutePath)){result.Content?=?oldResponse.Content;}else{object?content?=?null;var?objectContent?=?oldResponse.Content?as?ObjectContent;if?(objectContent?!=?null){content?=?objectContent.Value;}//把action返回的值放到ReturnData的Result中result.Content?=new?ObjectContent<ReturnData>(new?ReturnData?{Msg?=?"成功",?Ret?=?CustomException.NoneError,?Result?=?content},_formatter);}actionExecutedContext.Response?=?result;}}///?<summary>///?API數據中的API是否匹配請求URIi///?</summary>///?<param?name="apiArray">API數據</param>///?<param?name="uri">請求URI</param>///?<returns>是否匹配</returns>private?static?bool?ApiMatch(string?apiArray,?string?uri){var?result?=?false;if?(!string.IsNullOrWhiteSpace(apiArray)){var?apiList?=?apiArray.ToLower().Split(',');string?uriLower?=?uri.ToLower();foreach?(var?api?in?apiList){if?(api?==?uriLower?||?api?+?"/"?==?uriLower){result?=?true;break;}}}return?result;}}//返回數據過濾器config.Filters.Add(new?ReturnDataFilterAttribute());

總結

以上是生活随笔為你收集整理的巧用ActionFilter的AOP特性,为返回的数据增加返回码和消息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。