我在这里阅读了关于从 ServiceStack 访问 ASP.NET 会话的优秀文章。
它似乎工作得很好,但我不知道如何为需要直接访问 HttpContext 的服务创建“传递”UT(Nunit),因为 Nunit 不使用 Web.config 和我的自定义工厂配置,并且无法创建我的定制工厂。
<httpHandlers>
<add path="api*" type="SomeNamespace.SessionHttpHandlerFactory" verb="*" />
</httpHandlers>
所以,我在 HttpContext.Current 有一个空引用
class SomeService : RestServiceBase<SomeDto>
{
public override object OnGet(SomeDto request)
{
var context = HttpContext.Current;
return something;
}
IRequestContext RequestContext { get; set; }
}
我也尝试过以这种方式模拟会话,但仍然无法正常工作
HttpWorkerRequest _wr = new SimpleWorkerRequest("/dummyWorkerRequest", @"c:\inetpub\wwwroot\dummy", "default.aspx", null, new StringWriter());
HttpContext.Current = new HttpContext(_wr);
HttpSessionStateContainer sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(), new HttpStaticObjectsCollection(), 10, true, HttpCookieMode.AutoDetect, SessionStateMode.InProc, false);
SessionStateUtility.AddHttpSessionStateToContext(HttpContext.Current, sessionContainer);
如何在 UT 创建我的自定义工厂?
抱歉英语不好。