小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Web API 下的 ActionFilter 與 ExceptionFilter

 昵稱10504424 2015-03-20
本文重點(diǎn)會標(biāo)紅。
背景需求,在進(jìn)入action之前做sign驗(yàn)證,以及反正錯誤時(shí),記錄log,返回錯誤的json形式信息。
復(fù)制代碼
#region  普通 ActionFilter add by caoheyang 20150319

    /// <summary>
    /// sign 以及參數(shù)合法性驗(yàn)證過濾器 add by caoheyang 20150318
    /// </summary>
    public class SignOpenApiAttribute : System.Web.Http.Filters.ActionFilterAttribute
    {
        /// <summary>
        /// 重寫OnActionExecuting方法   在進(jìn)入控制器之前驗(yàn)證 sign以及 參數(shù)合法性信息 add by caoheyang 20150318
        /// </summary>
        /// <param name="actionContext"></param>
        public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            lock (actionContext)
            {
                dynamic paramodel = actionContext.ActionArguments["paramodel"]; //當(dāng)前請求的參數(shù)對象 
                if (actionContext.ModelState.Count > 0 || paramodel == null) //參數(shù)錯誤,請求中止
                    actionContext.Response = actionContext.ActionDescriptor.ResultConverter.Convert
                            (actionContext.ControllerContext, ResultModel<object>.Conclude(OrderApiStatusType.ParaError));
                IGroupProvider groupProvider = new GroupProvider();
                GroupApiConfigModel groupCofigInfo = groupProvider.GetGroupApiConfigByAppKey(paramodel.app_key, paramodel.v).Data;
                if (groupCofigInfo != null && groupCofigInfo.IsValid == 1)//集團(tuán)可用,且有appkey信息
                {
                    string signStr = groupCofigInfo.AppSecret + "app_key=" + paramodel.app_key + "timestamp" + paramodel.timestamp + "v=" + paramodel.v + groupCofigInfo.AppSecret;
                    string sign = MD5.Encrypt(signStr);
                    paramodel.group = ParseHelper.ToInt(groupCofigInfo.GroupId, 0);
                    actionContext.ActionArguments["paramodel"] = paramodel; ;
                    if (sign != paramodel.sign)   //sign錯誤,請求中止
                        actionContext.Response = actionContext.ActionDescriptor.ResultConverter.Convert
                            (actionContext.ControllerContext, ResultModel<object>.Conclude(OrderApiStatusType.SignError)); //此處標(biāo)紅需要與 apicontroller里應(yīng)用fillter的action返回值一直。
                }
                else
                    actionContext.Response = actionContext.ActionDescriptor.ResultConverter.Convert
                           (actionContext.ControllerContext, ResultModel<object>.Conclude(OrderApiStatusType.SignError));  //sign錯誤,請求中止
            }
        }
    }

    #endregion

    #region  ExceptionFilter add by caoheyang 20150319

    /// <summary>
    /// 自定義全局異常處理類  add by caoheyang 20150319   全局過濾器,記錄log
    /// </summary>
    public class OpenApiHandleErrorAttribute : ExceptionFilterAttribute
    {
        /// <summary>
        /// 重寫異常處理方法 add by caoheyang 20150205  其次執(zhí)行
        /// </summary>
        /// <param name="filterContext">上下文對象  該類繼承于ControllerContext</param>
        public override void OnException(HttpActionExecutedContext filterContext)
        {
            LogHelper.LogWriterFromFilter(filterContext.Exception);
        }
    }

    /// <summary>  action過濾器,當(dāng)內(nèi)部代碼發(fā)生異常時(shí),改變當(dāng)前的請求服務(wù)器端返回信息
    /// 自定義action異常處理類,捕獲異常,返回系統(tǒng)錯誤提示信息  add by caoheyang 20150319
    /// </summary>
    public class OpenApiActionErrorAttribute : ExceptionFilterAttribute
    {
        /// <summary>
        /// 重寫異常處理方法 add by caoheyang 20150205    首先執(zhí)行  
        /// </summary>
        /// <param name="filterContext">上下文對象  該類繼承于ControllerContext</param>
        public override void OnException(HttpActionExecutedContext filterContext)
        {
            filterContext.Response = filterContext.ActionContext.ActionDescriptor.ResultConverter.
              Convert(filterContext.ActionContext.ControllerContext, ResultModel<object>.Conclude(OrderApiStatusType.SystemError));
            //此處標(biāo)紅需要與 apicontroller里應(yīng)用fillter的action返回值一直。
} } #endregion
復(fù)制代碼

ApiController eg。

復(fù)制代碼
 // POSR: Order GetStatus    paramodel 固定 必須是 paramodel
        /// <summary>
        /// 訂單狀態(tài)查詢功能  add by caoheyang 20150316
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [SignOpenApi] //sign驗(yàn)證過濾器 設(shè)計(jì)參數(shù)驗(yàn)證,sign驗(yàn)證 add by caoheyang 201503167
        [OpenApiActionError] //異常過濾器 add by caoheyang 一旦發(fā)生異常,客戶端返回系統(tǒng)內(nèi)部錯誤提示
        public ResultModel<object> GetStatus(ParaModel<GetStatusPM_OpenApi> paramodel)
        {
          
        }
復(fù)制代碼

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多