我正在使用全局过滤器来确定是否允许用户访问某个页面/控制器。由于我无法进行简单的会话变量创建,因此无法对此进行大量研究。这是我的简化代码:
public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
context.HttpContext.Session.Add("asdfasdf", 1234);
//Check if user is authorized in db
//...
base.OnActionExecuted(context);
}
}
错误:
System.Web.HttpException: Failed to login to session state SQL server for user '<USERNAME>'.
如果我评论Session.Add
,该应用程序运行正常。这很奇怪,因为给出的错误完全不相关(我认为)。在这种情况下,如何让我的会话变量起作用?更好的问题,这是进行用户身份验证的正确方法吗?
答案 0 :(得分:3)
您的应用程序似乎已配置为使用SQL Server session state
持久性。并且您的web.config中的连接字符串有问题。
如果要使用SQL Server会话状态持久性,请确保您拥有correctly configured
数据库并为其指定了正确的连接字符串:
<configuration>
<system.web>
<sessionState mode="SQLServer"
sqlConnectionString="Integrated Security=SSPI;data
source=SampleSqlServer;" />
</system.web>
</configuration>
如果您不想使用SQL Server来保持会话,则可以切换回InProc模式:
<system.web>
<sessionState mode="InProc" />
</system.web>
</configuration>