gpt4 book ai didi

asp.net-mvc - 使用旧参数调用 Controller 操作

转载 作者:行者123 更新时间:2023-12-02 11:10:40 27 4
gpt4 key购买 nike

在我的公司,我们无法为每个新请求实例化 Controller 。我们必须将其存储在 session 中并每次重新使用它,我知道这是错误的,但我们必须在请求之间保持 Controller 的状态。这就是我们所做的:

我们创建了这个 Controller 工厂:

public class SGVControllerFactory : IControllerFactory
{

public IController CreateController(RequestContext requestContext, string controllerName)
{
string _SessionId = controllerName + "Controller";
foreach (var _Object in HttpContext.Current.Session)
{
if (_Object.ToString() == _SessionId)
{
IController _Controller = (IController)HttpContext.Current.Session[_Object.ToString()];



return _Controller;
}
}
return null;
}


public SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName)
{
return SessionStateBehavior.Default;
}


public void ReleaseController(IController controller)
{
//We never release our controllers!!!
}
}

我们有这个基本 Controller :

public class SGVController : Controller
{
protected override void Execute(RequestContext requestContext)
{
if (requestContext == null)
{
throw new ArgumentNullException("requestContext");
}
if (requestContext.HttpContext == null)
{
throw new ArgumentException("Http context is null", "requestContext");
}

Initialize(requestContext);

using (ScopeStorage.CreateTransientScope())
{
ExecuteCore();
Dispose();
}
}

}

该 Controller 类与默认 MVC Controller 的唯一不同之处在于它不限制自身只能被调用一次。

现在,我的问题是..如果我有这个 Action :

public JsonResult Foo(string Bar) {
return Json(new List<string> { Bar, Bar });
}

“Bar”参数将始终具有第一次调用该操作的值。我找不到任何可以解释这一点的东西。请求参数字典具有正确的值,但操作仍然获取旧值。

最佳答案

您可以尝试通过重写 Initialize 方法来重新初始化 ValueProvider 和 TempData,以处理新值。

public class SGVController : Controller
{

protected override void Initialize(RequestContext requestContext)
{
this.TempData = null;
this.ValueProvider = null;

base.Initialize(requestContext);
}

protected override void Execute(RequestContext requestContext)
{
if (requestContext == null)
{
throw new ArgumentNullException("requestContext");
}
if (requestContext.HttpContext == null)
{
throw new ArgumentException("Http context is null", "requestContext");
}

Initialize(requestContext);

using (ScopeStorage.CreateTransientScope())
{
ExecuteCore();
Dispose();
}
}
}

希望这会有所帮助,

关于asp.net-mvc - 使用旧参数调用 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15522909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com