【发布时间】:2018-10-03 18:54:25
【问题描述】:
我对 MVC 中的执行顺序存在架构误解。
我正在重写我的初始化
public class HomeController: Controller {
protected override void Initialize(RequestContext requestContext)
{
var myVar = "AValue";
// basically run some internal security
initialization
}
然后在我的 javascript 中,我使用延迟的 promise() 运行一系列 10 个 Ajax 调用。
Onload 设置它们并使用 $when 运行
然后
js:
this.BeginMyAjaxQuery = function() {
methodName: MyAjaxQuery
};
在一个完全不同的控制器上,它继承了我的 HomeController
public JsonResult MyAjaxQuery()
{
return Perform(() =>
{
return ThisQueryWithMyParameter(AValue);
});
}
Perform 是我们成功用来创建 JsonResults 的包装器
关于我对 MVC 架构行为方式的误解: 当我加载我的 URL 时,AJAX 在我完成 HomeController 初始化之前一直在它自己的线程上运行。因此,我的变量没有设置,当我执行实际查询时,我收到不正确的结果......大多数时候但并非总是如此。这当然更烦人。
我的 ajax 调用如何绕过我的控制器初始化并直接转到控制器方法?
增加我的困惑 将我的代码添加到 HomeController 上的构造函数中的行为方式相同。结果不稳定。
最后一点,如果重要的话:使用 Partial Views 和 KnockoutJS 进行前端交付
【问题讨论】:
-
可能涉及到任何“静态”吗?
-
有静电!我试图在 Initialize 函数中设置的是我的安全用户。我不熟悉 a/a/a 过滤器。我会去看看那些,然后回复你。
-
添加一点上下文,因为我的描述由于复杂性而显得相当简陋:我们有一个本土安全机制,它利用一些 AD 信息与特定的“功能”控制相结合。我们正在获取 Identity 的上下文,然后往返于数据库以获取我们的内部标识符以确定各种访问权限。正是从那次往返中,我获得了正确执行 ajax 查询所需的信息。我还不明白我的 ajax 是如何“绕过”控制器初始化的。这似乎违反直觉,但我可能只是看错了。
-
好的,static 可能有问题,因为它没有重新初始化:它将在所有线程中保留其值。如果将其设置为
1,则在所有线程上都是1。有关 mvc 管道,请参阅 this link。这里有一些例子about action filters。如果它是安全的,您可能需要一个身份验证操作过滤器。 -
斯特凡——你真漂亮!谢谢你澄清说我整个早上都在角落里抽泣。
标签: javascript c# ajax asp.net-mvc controller