asp.net-mvc – 如何检查是否为浏览器启用了cookie
发布时间:2020-12-15 16:40:18 所属栏目: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-mvc – 如何在多个Asp.net MVC应用程序中使用通用布
- asp.net-mvc – 如何编辑表格数据(ASP MVC)
- asp.net-mvc-3 – 用于在ASP.NET MVC3中使用Grid.MVC编辑记
- ASP.NET Excel导出编码问题
- 如何使用ASP.NET MVC Web API OData链接到Razor中的OData集
- asp.net-identity – UseOAuthBearerTokens vs UseOAuthBea
- asp.net-web-api – 从ASP.NET Web API ASP.NET Core 2返回
- 扩展ASP.NET数据缓存以在Web场之间共享
- asp.net-mvc – 允许一个人一次使用帐户的可重用方式
- asp.net – 如何在gridview中将navigateurl添加到超链接
推荐文章
站长推荐
- 序列化 – Newtonsoft中的TypeNameHandling需要$
- asp.net-mvc-4 – AngularJs,DropZone.Js,MVC4 –
- asp.net-mvc-3 – Azure网站上的RavenDb – 访问
- asp.net – Web Api参数始终为null
- asp.net – 我应该在Web应用程序中嵌入CSS / Jav
- asp.net-mvc-2 – ASP.NET MVC 2并列为隐藏值?
- asp.net-mvc-3 – dataannotations在主键上设置标
- asp.net – 如何接收JSON作为MVC 5操作方法参数
- asp.net-mvc-4 – 在一个项目中混合Web Api和ASP
- asp.net – 来自WebHttpBinding的WCF服务中的Acc
热点阅读
