asp.net-mvc – 如何检查是否为浏览器启用了cookie
发布时间:2020-12-15 11:17:45 所属栏目:asp.Net 来源:互联网
导读:如何在ASP.NET(MVC)中检查是否为浏览器启用了cookie 这是我的登录操作方法的授权过滤器: /// summary/// Ensures that cookies are enabled./// /summary/// exception cref=CookiesNotEnabledException /[AttributeUsage(AttributeTarg
如何在ASP.NET(MVC)中检查是否为浏览器启用了cookie 解决方法这是我的登录操作方法的授权过滤器:/// <summary> /// Ensures that cookies are enabled. /// </summary> /// <exception cref="CookiesNotEnabledException" /> [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,AllowMultiple = true,Inherited = true)] public class EnsureCookiesAttribute : FilterAttribute,IAuthorizationFilter { private readonly string _cookieName; private readonly bool _specificCookie; /// <summary> /// The name of the cookie to use to ensure cookies are enabled. /// </summary> [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2211:NonConstantFieldsShouldNotBeVisible",Justification = "Field is public so that the default value may be modified.")] public static string DefaultCookieName = "SupportsCookies"; public const string CookieCheck = "cookieCheck"; /// <summary> /// Checks to make sure cookies are generally enabled. /// </summary> public EnsureCookiesAttribute() : this(null) { } /// <summary> /// Checks to make sure a cookie with the given name exists /// </summary> /// <param name="cookieName">The name of the cookie</param> public EnsureCookiesAttribute(string cookieName) { if (String.IsNullOrEmpty(cookieName)) { cookieName = DefaultCookieName; } else { _specificCookie = true; } QueryString = CookieCheck; _cookieName = cookieName; } /// <summary> /// The name of the cookie to check for. /// </summary> public string CookieName { get { return _cookieName; } } /// <summary> /// The querystring parameter to use to see if a test cookie has been set. /// </summary> public string QueryString { get; set; } protected static CookiesNotEnabledException CreateBrowserException() { return new CookiesNotEnabledException("Your browser does not support cookies."); } protected static CookiesNotEnabledException CreateNotEnabledException() { return new CookiesNotEnabledException("You do not have cookies enabled."); } #region Implementation of IAuthorizationFilter /// <summary> /// Called when authorization is required. /// </summary> /// <param name="filterContext">The filter context.</param> [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design","CA1031:DoNotCatchGeneralExceptionTypes",Justification = "Should swallow exceptions if a cookie can't be set. This is the purpose of the filter.")] public void OnAuthorization(AuthorizationContext filterContext) { if (filterContext == null) throw new ArgumentNullException("filterContext"); var request = filterContext.HttpContext.Request; var response = filterContext.HttpContext.Response; if (!request.Browser.Cookies) throw CreateBrowserException(); string currentUrl = request.RawUrl; var noCookie = (request.Cookies[CookieName] == null); if (!_specificCookie && noCookie && request.QueryString[QueryString] == null) { try { // make it expire a long time from now,that way there's no need for redirects in the future if it already exists var c = new HttpCookie(CookieName,"true") {Expires = DateTime.Today.AddYears(50)}; response.Cookies.Add(c); currentUrl = currentUrl + (currentUrl.Contains('?') ? "&" : "?") + QueryString + "=true"; filterContext.Result = new RedirectResult(currentUrl); return; } catch { } } if (noCookie) throw CreateNotEnabledException(); } #endregion } /// <summary> /// Thrown when cookies are not supported. /// </summary> [Serializable] public class CookiesNotEnabledException : HttpException { public CookiesNotEnabledException() { } protected CookiesNotEnabledException(SerializationInfo info,StreamingContext context) : base(info,context) { } public CookiesNotEnabledException(string message) : base(message) { } public CookiesNotEnabledException(string message,Exception innerException) : base(message,innerException) { } } 您可以使用它来确保启用cookie [EnsureCookies] [HandleError(ExceptionType = typeof(CookiesNotEnabledException),View="NoCookies")] public ActionResult LogOn(....) ... 或确保为某个操作设置了特定的Cookie [EnsureCookies("MyCookie")] [HandleError(ExceptionType = typeof(CookiesNotEnabledException),View="Some cookie not set view"] public ActionResult ActionThatNeedsMyCookie().... 我不确定你为什么需要那样做,但确实如此.希望它有所帮助. (编辑:鲜蔬坊站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 在客户端启用/禁用RequiredValidator /不启动Cu
- asp.net-web-api – Web API / MVC 6中的安全JSON Web令牌
- asp.net-core – .NET Core SDK安装程序无法在Windows 2012
- asp.net-mvc – 路由是在我的区域中找到控制器,但不是视图
- 如何在ASP.NET Web应用程序中打开一个SectionGroup?
- asp.net-mvc – ASP.NET MVC 4 Visual Studio 2010项目模板
- asp.net – 我的HTML5的doctype是否必须在第一行?
- asp.net – 当绑定值包含冒号时,如何绑定GridView HyperLin
- 使用MVC在ASP.NET中实现API的最佳方法是什么?
- asp.net – 如何扩展aspnet成员身份验证表?
推荐文章
站长推荐
- asp.net-mvc – 如何从mvc中的控制器中设置隐藏字
- asp.net-mvc – 在ASP.NET MVC中实现工作单元的方
- Autofac和ASP.NET Web API ApiController
- asp.net-core – .NET Core SDK安装程序无法在Wi
- asp.net-mvc – 使用CORS在WebAPI中将text / pla
- asp.net – @ Url.Action在控制器中创建空值的参
- 在IIS / ASP.Net中的.NET 1.1应用程序中创建.NET
- asp.net-mvc – Url.Action生成查询字符串,以任何
- asp.net – IIS Express(WebMatrix)打开外部连接
- 如何在Asp.Net Mvc中进行Basecamp风格的账户?
热点阅读