如何在ServiceStack服务实现中使用标准的ASP.NET会话对象
|
我刚刚开始使用ServiceStack,作为测试用例,我正在寻找一种使用标准ASP.Net处理程序构建的现有服务。我已经设法让它一切正常工作,因为我想要它,但有某些方面使用ASP.Net会话对象。 我已经尝试在服务接口中添加IRequiresSessionState: public class SessionTestService : RestServiceBase<SessionTest>,IRequiresSessionState {
public override object OnPost(SessionTest request) {
// Here I want to use System.Web.HttpContext.Current.Session
}
}
麻烦是我似乎无法让它工作,因为Session对象总是为空。 我已经做了很多谷歌搜索,并在https://github.com/mythz/ServiceStack/blob/master/tests/ServiceStack.WebHost.IntegrationTests/Services/Secure.cs和困惑相似,但我找不到任何代码这样做(这让我惊讶)。任何人都可以解释为什么上述不起作用,并建议我需要做些什么来使其工作? 注意:最终我可能会将其替换为Redis或者将尝试删除任何服务器端会话要求,但我认为我将暂时使用ASP.Net实现,以使事情发生并避免重做在这一点上超过了必要的。 解决方法使用ServiceStack ISessionServiceStack具有由ICacheClient支持的新的ISession接口,可让您在MVC控制器,ASP.NET基础页面和ServiceStack的Web服务之间共享相同的ISession,该服务共享相同的Cookie标识,允许您在这些Web框架之间自由共享数据。 注意:ISession是一个干净的实现,完全绕过ServiceStack自己的组件的现有ASP.NET会话,如ServiceStack’s MVC PowerPack所述,并在Sessions wiki page中详细说明。 为了方便使用ServiceStack的Session(Cache& JSON Serializer),您的Controllers从ServiceStackController(MVC)或PageBase(在ASP.NET中)继承, 在ServiceStack中添加了新的验证/验证功能,您可以在wiki上阅读: > Authentication and authorization 使用ASP.NET会话 本质上ServiceStack只是一套在ASP.NET或HttpListener主机上运行的轻量级IHttpHandler。如果托管在IIS / ASP.NET(最常见),它的工作原理像一个普通的ASP.NET请求。 ServiceStack中没有任何内容访问或影响底层ASP.NET应用程序中配置的缓存和会话提供程序。如果要启用它,您将需要按照ASP.NET中的正常配置(即ServiceStack外),请参阅: http://msdn.microsoft.com/en-us/library/ms178581.aspx 配置完成后,您可以通过单例访问ServiceStack Web服务中的ASP.NET会话: HttpContext.Current.Session 或者通过底层的ASP.NET HttpRequest与: var req = (HttpRequest)base.RequestContext.Get<IHttpRequest>().OriginalRequest; var session = req.RequestContext.HttpContext.Session; 虽然由于强制依赖于XML配置和degraded performance by default,我更喜欢避免使用ASP.NET的Session,而是选择使用ServiceStack附带的更清洁的Cache Clients。 基本上Sessions的工作方式(包括ASP.NET)是一个包含唯一ID的cookie被添加到Response唯一标识浏览器会话。该id指向服务器上的匹配的Dictionary / Collection,表示浏览器的Session。 您链接到的IRequiresSession接口在默认情况下不执行任何操作,它只是一种向自定义请求过滤器或基本Web服务发出信号的方式,该请求需要进行身份验证(例如,您应该将验证/身份验证逻辑在ServiceStack)。 这是一个Basic Auth implementation,看看Web服务是否安全,如果是,请确保他们已经通过身份验证。 这是another authentication implementation,而是通过在请求DTO上添加属性来验证标有[Authenticate]属性的所有服务,以及how to enable Authentication for your service。 ServiceStack中的新认证模型 上述实现是ServiceStack下一版本中包含的多验证提供者模型的区别。这是the reference example,显示如何在应用程序中注册和配置新的Auth模型。 验证策略 新的Auth模型完全是一种选择性的方便,因为您可以简单地使用它,并使用请求过滤器或基类(通过覆盖OnBeforeExecute)自己实现类似的行为。实际上,新的Auth服务实际上并不内置到ServiceStack中。整个实现方式都在可选的ServiceStack.ServiceInterfaces project中,并使用自定义请求过滤器实现。 以下是我多年来使用的不同身份验证策略: >使用[Attribute]标记需要身份验证的服务。可能是最惯用的C#方式,当session-id通过Cookie传递时,理想。>特别是在Web上下文之外,有时使用更明确的IRequiresAuthentication接口更好,因为它提供强大类型的访问用户和验证所需的SessionId。>您可以只需一个一线的身份验证每个需要它的服务 – 基于adhoc。一个合适的方法,当你有很少的服务需要身份验证。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 与Entity Framework中的联结表有多对多的关系?
- asp.net – Microsoft成员提供者与自定义提供者vs完成自定义
- 从ASP.Net页面通过C#将NetworkCredential传递给HttpWebRequ
- asp.net – 将RSS pubDate格式化为.NET DateTime
- ASP.NET MVC中的QR代码生成
- asp.net – 内部图像和文本的asp:LinkButton在回发后消失
- asp.net-mvc-3 – Backbone.js使用ASP.NET MVC的REST URL 3
- ASP.NET Ajax回发突然停止在IPhone / IPad上
- asp.net – HtmlGenericControl(“br”)呈现两次
- ASP.NET缓存的方法和最佳实践
- asp.net-mvc – 如何在ASP.NET MVC控制器中设置十
- 有趣的项目理念为体面的开发想要了解更多Asp.Net
- asp.net – applicationSettings和Web.config
- asp.net-mvc – 在ASP.NET MVC控制器结果中设置H
- asp.net-mvc – 找不到与Web API中的请求URI匹配
- asp.net-mvc-3 – 剃刀不能轻松地使用强类型的Ht
- asp.net – Visual Studio 2010中的HTML格式
- 单元测试后面的ASP.NET代码
- 在ASP.NET MVC Web API服务和MVC客户端体系结构中
- 企业ASP.NET MVC 3架构大纲
