Jquery 自定义controllerfactory:httpcontext.current.user和httpcontext.current.session仅在ajax post上为空

Jquery 自定义controllerfactory:httpcontext.current.user和httpcontext.current.session仅在ajax post上为空,jquery,asp.net,asp.net-mvc,ajax,post,Jquery,Asp.net,Asp.net Mvc,Ajax,Post,我用autofac在ASP MVC3中实现了一个自定义控制器工厂,通过从DefaultControllerFactory派生实现了一个非常基本的插件管理 在重写的GetControllerType(RequestContext RequestContext,string controllerName)方法中,我使用会话变量或httpcontext.current.user进行一些检查,以确定必须向最终用户提供哪种控制器类型 关键是,如果我在调用GetControllerType时执行普通的GET

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

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

关键是,如果我在调用GetControllerType时执行普通的GET(或通过在视图中使用childaction),我会设置这两个参数,但是如果我通过jquery直接对actionmethod执行POST ajax调用(contentType:'application/json;charset=utf-8'),则用户和会话在我的httpcontext中为null,但它们会在稍后设置,当我尝试在控制器操作(或actionfilter)中访问它们时

此外,本例中的AcquisiteRequestState从未触发,如果我浏览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]
}

我可以避免会话,但无法避免与当前用户匹配。

我也遇到了同样的问题。你找到解决办法了吗?我也有同样的问题。你找到解决办法了吗?