asp.net-mvc – 在BaseController中获取/设置HttpContext会话方法与Mocking H
发布时间:2020-05-24 16:05:20 所属栏目:asp.Net 来源:互联网
导读:我在BaseController类中创建了Get / Set HttpContext会话方法,还创建了Mocked HttpContextBase并创建了Get / Set方法. 哪个是使用它的最佳方式. HomeController : BaseController { var value1 = GetDataFromSession(key1) Se
|
我在BaseController类中创建了Get / Set HttpContext会话方法,还创建了Mocked HttpContextBase并创建了Get / Set方法. 哪个是使用它的最佳方式. HomeController : BaseController
{
var value1 = GetDataFromSession("key1")
SetDataInSession("key2",(object)"key2Value");
Or
var value2 = SessionWrapper.GetFromSession("key3");
GetFromSession.SetDataInSession("key4",(object)"key4Value");
}
public class BaseController : Controller
{
public T GetDataFromSession<T>(string key)
{
return (T) HttpContext.Session[key];
}
public void SetDataInSession(string key,object value)
{
HttpContext.Session[key] = value;
}
}
要么 public class BaseController : Controller
{
public ISessionWrapper SessionWrapper { get; set; }
public BaseController()
{
SessionWrapper = new HttpContextSessionWrapper();
}
}
public interface ISessionWrapper
{
T GetFromSession<T>(string key);
void SetInSession(string key,object value);
}
public class HttpContextSessionWrapper : ISessionWrapper
{
public T GetFromSession<T>(string key)
{
return (T) HttpContext.Current.Session[key];
}
public void SetInSession(string key,object value)
{
HttpContext.Current.Session[key] = value;
}
}
解决方法第二个似乎是最好的.虽然我可能会将这两个作为扩展方法写入 HttpSessionStateBase,而不是将它们放入基本控制器中.像这样:public static class SessionExtensions
{
public static T GetDataFromSession<T>(this HttpSessionStateBase session,string key)
{
return (T)session[key];
}
public static void SetDataInSession<T>(this HttpSessionStateBase session,string key,object value)
{
session[key] = value;
}
}
然后在控制器,帮助器或具有HttpSessionStateBase实例的内容中使用它: public ActionResult Index()
{
Session.SetDataInSession("key1","value1");
string value = Session.GetDataFromSession<string>("key1");
...
}
编写会话包装器在ASP.NET MVC中是无用的,因为框架提供的HttpSessionStateBase已经是一个抽象类,可以在单元测试中轻松模拟. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET Web Api HttpResponseException 400(错误请求)被II
- ASP.Net转发器项目命令未被触发
- asp.net核心 – ASP.NET核心MVC查看组件
- asp.net-mvc – PRG模式是否与AJAX表单帖子不兼容?
- 使用ASP.NET WebForms的xVal示例?
- asp.net-mvc-4 – 在ASP.NET MVC4 WebAPI中实现ETag支持
- asp.net-mvc – 将Castle Windsor与SignalR集成 – 我该如何
- asp.net从指定文化获取.resx的所有资源(ResourceManager.Ge
- .net – TagBuilder从MVC 3 beta版转到RC
- asp.net-mvc – MVC 3布局页面,Razor模板和下拉列表
推荐文章
站长推荐
- asp.net-mvc – 使用ValueInjecter在具有不同属性
- asp.net-core – ASP.Net核心maxUrlLength
- ASP.NET中继器模板,每第N个元素的条件代码
- asp.net – 为什么在web.config中保存动态数据是
- asp.net-web-api – Asp.net Web Api的基本项目模
- 将ASP.NET TextBox作为HTML5输入类型“Number”
- asp.net-mvc-3 – 从ASP的Ajax.ActionLink获取JS
- asp.net-mvc – 是否可以使用自定义错误页面与MV
- ASP.NET MVC 2.0 – RenderPartial和RenderActio
- asp.net-mvc – 如何刷新多个部分视图点击Ajax.A
热点阅读
