*1:NetCore的上下文,自行封裝一個全局靜態 HttpContextHelper
*2:讀取Json的配置文件
{ // IConfiguration Configuration 得注入,二級節點的訪問,用冒號 .GetSection("AppSettings:" + name) Configuration.GetSection("").Value; }
*3:讀取Session
// 先下載session的擴展nuget包 Microsoft.aspnetcore.http.extensions services.AddSession(); //寫在 ConfigureServices中; app.UseSession(); //寫在 Configure中 HttpContextHelper.Current.Session.GetString("pwdqrcodekey");
*4:控制器的一般fitter,繼承自 : Attribute, IActionFilter
/****************/
public class LoginFltAttribute : Attribute, IActionFilter { /// <summary> /// 執行后 /// </summary> /// <param name="context"></param> public void OnActionExecuted(ActionExecutedContext context) {} /// <summary> /// 執行前 /// </summary> /// <param name="context"></param> public void OnActionExecuting(ActionExecutingContext context) {} }
—1.獲取當前控制器名稱的異同
// string actionName = filterContext.ActionDescriptor.ActionName; //MVC5寫法 string actionName = filterContext.Controller.GetType().Name; //Core寫法
-2.返回數據字典到視圖的異同
filterContext.Result = new ViewResult { ViewName = "error", ViewData = new ViewDataDictionary<Return_Msg>(msg) }; //MVC5寫法 /*ViewDataDictionary實例化不了,多用快速監視,使用viewData,來構造他,就可以使用他了*/ ViewDataDictionary<Return_Msg> viewdata = new ViewDataDictionary<Return_Msg>(((Controller)filterContext.Controller).ViewData, msg); filterContext.Result = new ViewResult() { ViewName = "error", ViewData = viewdata }; //Core的寫法
-3.拿到控制器的屬性
filterContext.Controller.ViewBag.RightBtnView //MVC5寫法 Controller controller = filterContext.Controller as Controller; controller.ViewBag.RightBtnView = btnView; //Core寫法
-4.控制器中參數的獲取 (變量 pDesc 類型是 ParameterDescriptor)
int zbid = Convert.ToInt32(filterContext.ActionParameters[pDesc.ParameterName]); //MV5的寫法 int zbid= filterContext.ActionArguments[pDesc.Name].ToString(); //Core寫法 filterContext.ActionDescriptor.Parameters。 Ilist<ParameterDescriptor>//集合形式的存放 filterContext.ActionDescriptor.Parameters[0].Name //獲得第一個參數的名稱,只能拿到參數名稱,不能拿到key對應的value值 filterContext.ActionArguments//字典形式的參數列表,可以拿到key與value值,更加靈活
-5.取得當前參數列表List
List<string> arrQueryKeys = filterContext.HttpContext.Request.QueryString.AllKeys.ToList(); //MV5寫法 List<string> arrQueryKeys = filterContext.HttpContext.Request.Form.Keys.ToList(); //前端Form表單參數的集合 KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>[] kk= filterContext.HttpContext.Request.Query.ToArray(); //地址欄的參數列表,這里轉換成 數組,Core寫法
-5.1 當前列表中,拿到指定的參數,用指定的key得到對應的value,keyName=指定的key
int zbid= Convert.ToInt32(filterContext.HttpContext.Request.Params[keyName]); //MV5的寫法 int zbid = Convert.ToInt32(filterContext.HttpContext.Request.Form.FirstOrDefault(i => i.Key == keyName).Value);
-6.拿到上次訪問完整的地址域名,
filterContext.HttpContext.Request.UrlReferrer.OriginalString; //MVC5判斷請求的頭中有沒有“Referer”是否為空 filterContext.HttpContext.Request.Headers["Referer"]; //Core
7.判斷是否為Ajax請求
filterContext.HttpContext.Request.IsAjaxRequest()//MC5 判斷是否是Ajax請求 判斷Head頭部是否有 “X-Requested-With: XMLHttpRequest”,有=Ajax請求 public static bool IsAjaxRequest(this HttpRequest request) { bool result = false; var xreq = request.Headers.ContainsKey("x-requested-with"); if (xreq) result = request.Headers["x-requested-with"] == "XMLHttpRequest"; return result; }
8.先注冊。已經注冊過的,可以通過這種得到
protected virtual T CreateService<T>() { // typeof(T) ==>接口名 return (T)this.HttpContext.RequestServices.GetService(typeof(T)); }