Jquery 自定义controllerfactory:httpcontext.current.user和httpcontext.current.session仅在ajax post上为空
我用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呼叫中,会话和用户都是在那个时候设置的,而我没有这个问题 代码如下所示: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
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]
}
我可以避免会话,但无法避免与当前用户匹配。我也遇到了同样的问题。你找到解决办法了吗?我也有同样的问题。你找到解决办法了吗?