如何在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 ISession
ServiceStack具有由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-mvc – ASP.NET MVC(4) – 按特定顺序绑定属性
- asp.net – 任何方式构建Google文档,如PDF文件的查看器?
- 调试 ASP.NET Core 2.0 源代码
- asp.net-mvc – ASP.NET Core MVC:设置身份cookie的到期
- asp.net – 防止TextBox中的特殊字符
- ASP.NET MVC3:你可以发布和绑定一个对象数组吗?
- ASP.NET MVC要求我重新验证PNG文件,而不是GIF或JPEG
- asp.net-core – 在IIS Express上运行MVC6 Beta8应用程序
- asp.net-mvc – 使用Automapper将字符串映射到枚举
- asp.net-mvc – 如何使用Data Annotations Extensions在属性
- asp.net-mvc – 隐藏列并在编辑时显示字段或在jq
- asp.net – 没有Eval的GridGroupHeaderItem.Aggr
- asp.net-mvc – url.Action在ASP.NET MVC页面上的
- asp.net-mvc – ASP.NET MVC Action被调用两次
- asp.net-mvc – 我想调试(设置一个断点)System.W
- ASP.NET MVC – 根据最后的帖子排序论坛帖子
- 如何使用ASP.NET创建一个非常简单的Web代理?
- 动态ASP.net Web表单
- 如何创建使用asp:ListItem列表作为子控件的ASP.
- ASP.NET – Ajax Calendar Extender CSS继承自表