custom controllerfactory:httpcontext.current.user和httpcontext.current.session仅在ajax帖子上为null

时间:2011-08-08 18:09:06

标签: jquery asp.net asp.net-mvc ajax post

我在ASP MVC3中使用autofac实现了一个自定义控制器工厂,通过派生DefaultControllerFactory实现了一个非常基本的插件管理。

在覆盖的GetControllerType(RequestContext requestContext,string controllerName)方法中,我使用会话变量或httpcontext.current.user进行一些检查,以确定我必须向最终用户提供哪种控制器类型。

关键是,如果我执行正常的GET(或者在视图中使用子进程),那么在调用GetControllerType时我有两个set,但是如果我执行POST ajax调用(使用contentType:'application / json; charset = utf-8')通过jquery,直接到actionmethod,用户和会话在我的httpcontext中为空,但是当我尝试在我的控制器动作(或动作过滤器)中访问它们时,它们会立即设置。 / p>

在这种情况下,AcquireRequestState永远不会被触发,如果我浏览RequestContext属性,我可以看到会话的cookie(带有会话ID)是有效的。

你有任何提示吗?为什么在正常的GET调用会话和用户设置的时候,我没有这个问题?

代码是这样的:

protected override Type GetControllerType(RequestContext requestContext, string controllerName)
{
    if(plugins.All.Where(w=> w.Name == HttpContext.Current.Session["pluginName"].ToString() && w.User == HttpContext.Current.User.Identity.Name) 
        [do stuff]
}

我可以避免使用Session,但我无法避免匹配当前用户。

0 个答案:

没有答案