gpt4 book ai didi

asp.net-mvc - MVC Razor ViewEngine 不是线程安全的?

转载 作者:行者123 更新时间:2023-12-02 04:38:13 27 4
gpt4 key购买 nike

我目前有一个 .net mvc3 应用程序,负责管理多个位置中的类似 View ,这些 View 也使用相同的 Controller ,例如 site1/v1/views/index.cshtmlsite1/v2/views/index.cshtml

处理此问题的方法是创建一个继承自 DefaultControllerFactory 的 CustomControllerFactory,并在 CreateController 方法中清除现有 View 引擎并添加一个新的自定义 viewEngine,该 View 引擎根据当前 url 指定 View 位置格式。

如果用户登陆site1.com/v1/index.cshtml, View 引擎将指定以下 View 位置:

string versionDirectory = "v1";
ViewLocationFormats = new[]{ versionDirectory + "/Views/{0}.cshtml",
"/Views/{0}.cshtml",
"~/Shared/{0}.cshtml"
};

我遇到的问题是,如果多个用户大致同时登陆不同的页面,所有用户都会看到相同的 View 。

Initially i thought this was related to caching ,但是在自定义 viewEngine 中显式设置 usecache = false 后,这似乎与 ViewEngines class not being thread safe 有更多关系。 。

有人知道如何以不同的方式实现相同的结果吗?

提前致谢。

最佳答案

ViewEngines 集合是一个静态集合,因此它的值在请求之间共享。您尝试做的事情是可能的,但您这样做的方式不正确。

一种简单的方法是编写一个派生自 RazorViewEngine 的自定义 View 引擎并重写 FindView 方法。每个请求都会调用该方法一次。在您的实现中,调用 base.FindView,然后修改结果(如果它不为空)以包含您需要的站点信息。

Scott Hanselman 有一篇博客文章,展示了通过自定义 View 引擎在另一个位置查找 View 的示例。 http://www.hanselman.com/blog/ABetterASPNETMVCMobileDeviceCapabilitiesViewEngine.aspx

关于asp.net-mvc - MVC Razor ViewEngine 不是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047172/

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