我需要编写一个函数来帮助我在某些控制器中执行某些操作,因此我决定为此创建一个名为 Helper 的类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
namespace HocVuiDiary.Helper
{
public class CookiesHelper
{
public void UpdateSubkey(string name, string subkey, string subvalue)
{
HttpCookie cookie;
if (Request.Cookies[name] == null)
{
cookie = new HttpCookie(name);
cookie[subkey] = subvalue;
}
else
{
cookie = Request.Cookies[name];
cookie[subkey] = subvalue;
}
cookie.Expires = DateTime.Now.AddDays(30);
Response.Cookies.Add(cookie);
}
}
}
问题是我无法再访问请求或响应!
请告诉我正确的方法!
答案 0 :(得分:8)
您可以在助手类中使用HttpContext.Current.Request
和HttpContext.Current.Response
。
答案 1 :(得分:3)
虽然第一个答案在技术上是准确的,但我遇到了与使用外部.DLL创建cookie不一致的问题。类后面的代码调用外部.dll中的方法,cookie被创建,但在导航到下一页后,cookie有时不存在。
public void CreateCookie(string cookieName, string key, string value)
{
int minutes = 95;
string encryptedValue = utilities.EncryptString(value);
HttpCookie cookie = new HttpCookie(cookieName);
cookie[key] = encryptedValue;
cookie.Expires = DateTime.Now.AddMinutes(minutes);
HttpContext.Current.Response.Cookies.Add(cookie);
}
对外部类的其他调用正在按预期工作。
public bool CheckCookieExists(string cookieName)
{
bool exists = true;
HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName];
if (cookie != null)
{
return exists;
}
return exists = false;
}
答案 2 :(得分:0)
它与访问会话基本相同。使用httpcontext.current虽然有时不满意这里提到清理它: Can I use ASP.NET Session[] variable in an external DLL
在这里你可以定义一个像IRequest这样的接口来抽象出具体的实现,但这取决于你。