2012-06-20 29 views
0

在哪里可以插入自定义提供程序来设置请求上下文?ASP.NET MVC请求上下文详细信息

我想在“从”模式下运行ASP.NET MVC应用程序,同时逐渐从旧系统转换功能。每个请求都会有一个cookie,我想要抓取cookie,进行外部呼叫以将其解析为用户标识,并为请求的其余部分设置该用户标识。

我可能会设置表单身份验证cookie或使用Session,但关于身份验证的真相源必须是外部设置的cookie,对每个请求都是如此。

这样做的最好方法是什么?我在哪里插入?我查看了身份验证提供程序和授权属性,但这两者似乎都不是这个适合的地方。

+0

也许您的ASP.NET MVC应用程序或模块中的Application_AuthenticateRequest方法中的Global.asax。 –

+0

这似乎为时已晚。从MSDN:这个方法被称为通过HttpApplication做任何后验证处理。我需要实际进行身份验证,并创建用户对象。 –

+0

您可以在AuthenticateRequest方法中执行哪项操作。您可以将HttpContext.Current.User更新为自定义主体对象 –

回答

1

我会认为一个HttpModule会是这种情况下的理想选择吗?

如果我理解正确,我做了一个项目,类似的东西我最近工作:

public class UserSessionHttpModule : IHttpModule 
{ 

    private HttpApplication mApplication; 

    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     mApplication = context; 
     context.BeginRequest += new EventHandler(CheckUserSession); 
    } 

    private void CheckUserSession(Object sender, EventArgs e) 
    { 
     var extension = Path.GetExtension(mApplication.Context.Request.Path); 

     if (extension == "" || extension == ".aspx") 
     { 
      var userSessionService = ObjectFactory.GetInstance<IUserSessionService>(); 
      userSessionService.CheckUserSession(); 
     } 

    } 
} 
+0

听起来很有希望。我认为HttpModule将无法访问ASP.NET上下文。在不知道认证是非标准的情况下,我需要为请求继续设置什么? –

+0

我实现了我自己的自定义AuthorizeAttribute,我使用自己的用户会话服务对其进行了操作以授权他们。可以发布代码,如果它会帮助。 – soupy1976

+0

我真的只想知道表单身份验证设置了什么,所以我可以使自定义身份验证过程对控制器透明。它只是HttpContext.User,还是有更多的设置要做? –

0

您可以覆盖Init方法Global.asax页面,并听取了PostAuthenticateRequest事件,这些事件触发后身份验证,以便您可以从表单验证您喜欢的任何值验证cookie并注入您自己的