gpt4 book ai didi

asp.net-mvc - 关于 HttpContext、HttpContextBase 和 Action Filters 的问题

转载 作者:行者123 更新时间:2023-12-04 06:31:27 26 4
gpt4 key购买 nike

我试图在一个静态类上构建一个静态属性,该属性基本上会返回一个 cookie 值,以在我的 MVC 站点(MVC 3,如果重要的话)中使用。像这样的东西:

public static class SharedData
{
public static string SomeValue
{
get
{
if (HttpContext.Current.Request.Cookies["SomeValue"] == null)
{
CreateNewSomeValue();
}

return HttpContext.Current.Request.Cookies["SomeValue"].Value.ToString();
}
}
}

我需要从 Controller 操作、global.asax 方法和操作过滤器中访问它。但问题是,当 Action 过滤器运行时,HttpContext 不可用。现在,我必须有一个单独的静态方法才能从我传入的过滤器上下文中提取 cookie,这看起来很尴尬。

构建这样一个静态方法来检索这样的 cookie 值的最佳解决方案是什么,该方法既适用于 Controller 操作又适用于操作过滤器?或者有没有更好的方法来做这样的事情?

提前致谢。

最佳答案

静态调用HttpContext.Current不是好的设计。相反,创建一个扩展方法以从 HttpContext 的实例访问 cookie。和 HttpContextBase .

我为你写了一个小 helper 。您可以使用它从操作过滤器中执行您的功能。

public static class CookieHelper
{
private const string SomeValue = "SomeValue";
public static string get_SomeValue(this HttpContextBase httpContext)
{
if(httpContext.Request.Cookies[SomeValue]==null)
{
string value = CreateNewSomeValue();
httpContext.set_SomeValue(value);
return value;
}
return httpContext.Request.Cookies[SomeValue].Value;
}
public static void set_SomeValue(this HttpContextBase httpContext, string value)
{
var someValueCookie = new HttpCookie(SomeValue, value);
if (httpContext.Request.Cookies.AllKeys.Contains(SR.session))
{
httpContext.Response.Cookies.Set(someValueCookie);
}
else
{
httpContext.Response.Cookies.Add(someValueCookie);
}
}
}

注意:您可以轻松地使这些方法在 HttpContext 上工作而只是更换 HttpContextBase参数与 HttpContext .

关于asp.net-mvc - 关于 HttpContext、HttpContextBase 和 Action Filters 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5366642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com