asp.net-mvc – MVC Razor ViewEngine不是线程安全的吗?
我目前有一个.net mvc3应用程序,负责管理多个位置的类似视图,这些位置也使用相同的控制器,例如site1 / v1 / views / index.cshtml和site1 / v2 / views / index.cshtml.
处理它的方法是创建一个继承自DefaultControllerFactory和CreateController方法的CustomControllerFactory,清除现有的视图引擎并添加一个新的自定义viewEngine,它根据当前url指定视图位置格式. 如果用户登陆site1.com/v1/index.cshtml,则viewengine将指定以下视图位置: string versionDirectory = "v1"; ViewLocationFormats = new[]{ versionDirectory + "/Views/{0}.cshtml","/Views/{0}.cshtml","~/Shared/{0}.cshtml" }; 我遇到的问题是,如果多个用户在大致相同的时间落在不同的页面上,则所有用户都将看到相同的视图. Initially i thought this was related to caching,但在自定义viewEngine中明确设置usecache = false后,似乎这与ViewEngines class not being thread safe有更多关系. 有没有人对我如何能够以不同的方式实现相同的结果有任何想法? 提前致谢. 解决方法
ViewEngines集合是一个静态集合,因此它的值在请求之间共享.你试图做的是可能的,但你做的方式是不正确的.
一种简单的方法是编写一个派生自RazorViewEngine的自定义视图引擎并覆盖FindView方法.每个请求调用一次该方法.在您的实现中,调用base.FindView然后修改结果(如果它不为null)以包含您需要的站点信息. Scott Hanselman有一篇博文,展示了通过自定义视图引擎在另一个位置查看视图的示例. http://www.hanselman.com/blog/ABetterASPNETMVCMobileDeviceCapabilitiesViewEngine.aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 我应该在ASP.NET MVC中使用Anti-XSS安全运行
- asp.net-core – 返回404页面,不重定向
- Asp.net MVC企业级开发(02)---Log4net
- 模型视图控制器 – 如何在自定义MembershipProvider上调用I
- asp.net-mvc – 在mvc 5和web api 2之间共享owin cookie身份
- 在ASP.NET web.config全球标记中设置日期格式?
- asp.net-core – 如何在ASP.NET Core的OpenIdConnectOption
- asp.net-core – 使用.NET Core时需要AssemblyInfo吗?
- asp.net – Visual Studio在Aspx文件中缺少扩展/折叠按钮
- asp.net-mvc – Asp mvc 3 noobie:为什么代码优先方法不在
- CORS支持PUT和DELETE与ASP.NET Web API
- asp.net-mvc – 使用Razor DropDownList的Bootst
- 当将单字节添加到响应中时,ASP.NET WebAPI输出的
- asp.net – 如何以编程方式将SMTP服务器详细信息
- asp.net – 无法访问不可见时ASP Grid视图中的绑
- 嵌套字典到嵌套转发器asp.net c#
- asp.net-core-mvc – 创建多个dbcontexts的MVC 6
- Asp.net视图状态MAC的验证失败
- asp.net core 实现支持多语言
- asp.net – HttpUtility.UrlEncode和Application