gpt4 book ai didi

asp.net - 从 Controller 构造函数访问 Request.Cookies

转载 作者:行者123 更新时间:2023-12-04 22:26:13 25 4
gpt4 key购买 nike

我正在使用 FormsAuthenticationTicket 的 UserData 属性来存储一些特定于用户的信息。我有一个 HelperClass 将这个 UserData 反序列化为一个自定义对象以进行强类型访问。我的 Controller 设置如下

public class SomeController : Controller
{
private CookieData _cookieData;

public SomeController()
{
_service = new ForderungsStellerService(new ModelStateWrapper(this.ModelState));
HttpCookie cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
_cookieData= GetSessionData.FromCookie(ticket);
}
}

问题似乎是,请求在 Controller 构建时为空。从 ActionMethod 访问 Request.Cookies 时,此代码段有效。

由于 DRY 原因,我希望在构造函数中填充 _cookieData 对象。

有没有人对这个问题有暗示?

此致...

最佳答案

我将创建一个理解 CookieData 以及如何将其从 Request 对象中取出的 ModelBinder。我担心使构造函数满意所需的单元测试创​​建代码。如果您使用 Model Binder 将其作为 Controller 的参数,则可以避免该测试开销。

public class SomeController : Controller
{
// only need to pass in the data object for unit testing.
// ModelBinder takes care of DRY
public ActionResult Index(CookieData cookieData)
{
}
}

为什么它在构造函数中不起作用的答案是当时尚未使用 ControllerContext 初始化 Controller。
public HttpContextBase HttpContext {
get {
return ControllerContext == null
? null
: ControllerContext.HttpContext;
}
}

如果您 真的 想在构造函数中执行此操作(不要),则使用 HttpContext.Request 而不是包装器。但是这样做会使您的代码无法测试,并且您的对齐方式将下降 3 分。

关于asp.net - 从 Controller 构造函数访问 Request.Cookies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1005478/

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