我们使用 asp.net 3tire架构(Farmer System web)创建了一个项目。由于该项目的第二部分使用 Asp.net MVC4 (门户网站)开发了另一个网站。这些项目单独托管。当用户登录到农民系统时,他也可以使用门户。
当用户导航到门户网站时,我想传递记录会话。请有人告诉我该怎么做?
答案 0 :(得分:2)
使用ServiceStack ISession
ServiceStack有一个由ISession
支持的新ICacheClient
接口,允许您在MVC控制器,ASP.NET基页和ServiceStack的Web服务之间共享相同的ISession
,它们共享相同的Cookie ID,允许您可以在这些Web框架之间自由共享数据。
注意:ISession是一个干净实现,它完全绕过现有的ASP.NET会话和Service ServiceStack's MVC PowerPack中描述的ServiceStack自己的组件,并在{{3}中详细解释}。
要轻松使用ServiceStack的会话(缓存和JSON序列化程序),您的控制器将继承自Sessions wiki page(在MVC中)或ServiceStackController(在ASP.NET中)
ServiceStack中还添加了新的身份验证/验证功能,您可以在维基上阅读:
使用ASP.NET会话
基本上Validation只是在ASP.NET或HttpListener主机上运行的一组轻量级 IHttpHandler 。如果托管在IIS / ASP.NET(最常见)中,它就像普通的ASP.NET请求一样工作。
ServiceStack中的任何内容都不会访问或影响底层ASP.NET应用程序中已配置的缓存和会话提供程序。如果要启用它,则需要在ASP.NET中正常配置它(即在ServiceStack之外),请参阅:
配置完成后,您可以通过单例访问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配置和http://msdn.microsoft.com/en-us/library/ms178581.aspx,我宁愿避免使用ASP.NET的Session,而是选择使用ServiceStack附带的清除degraded performance by default。
基本上,Sessions的工作方式(包括ASP.NET)是一个包含唯一ID 的cookie,它被添加到唯一标识浏览器会话的Response中。此 id 指向服务器上匹配的Dictionary / Collection,代表浏览器的Session。
您链接到的 IRequiresSession 界面默认情况下不执行任何操作,它只是向自定义请求筛选器或基本Web服务发出信号通知此请求需要进行身份验证的方式(即您应该在ServiceStack中放置验证/身份验证逻辑的两个地方。
这是一个Cache Clients,用于查看网络服务是否安全,如果是,请确保他们已通过身份验证。
以下Basic Auth implementation代替验证标有 [Authenticate] 属性的所有服务,并通过在您的请求DTO上添加属性来验证another authentication implementation。
上述实现是ServiceStack下一版本中包含的多身份验证提供程序模型的一部分。这里是how to enable Authentication for your service,展示了如何在应用程序中注册和配置新的Auth模型。
新的Auth模型完全是一种选择上的便利,因为您可以使用请求过滤器或基类(通过覆盖)自行使用它并实现类似的行为the reference example)。事实上,新的Auth服务实际上并没有内置到ServiceStack本身。整个实现位于可选的OnBeforeExecute中,并使用自定义请求过滤器实现。
以下是我多年来使用的不同身份验证策略:
使用 [Attribute] 标记需要身份验证的服务。可能是最惯用的C#方式,非常适合通过Cookie传递 session-id 。
特别是在Web上下文之外,有时使用更明确的 IRequiresAuthentication 接口更好,因为它提供了对身份验证所需的User和SessionId的强类型访问。
< / LI>您可以在每个需要它的服务上使用1-liner进行身份验证 - 在特定情况下。当您很少需要身份验证的服务时,这是一种合适的方法。