asp.net-mvc – ActionFilterAttributes是否跨线程重用?如何工
我已经做了一些测试与下面的代码尝试和锻炼如何ActionFilterAttributes工作:
public class TestAttribute : ActionFilterAttribute { private string _privateValue; public string PublicValue { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { _privateValue = DateTime.Now.ToString(); base.OnActionExecuting(filterContext); } } 当我在两个并行线程上运行上面的代码时,_privateValue字段被混淆。但是PublicValue属性不会感到困惑。 在我看来,ActionFilterAttributes在线程之间重用,但是根据指定给公共属性的常量创建新的实例。我对么? 在哪里可以找到有关这方面的信息? 解决方法
这将取决于ASP.NET MVC的版本,但是你不应该将实例状态存储在将在不同方法之间重用的动作过滤器中。这里是一个引用的例子从一个
breaking changes在ASP.NET MVC 3:
这基本上意味着相同的动作过滤器实例可以重用于不同的操作,如果你已经存储了实例状态,它可能会破坏。 而在代码这意味着你绝对不应该写一个动作过滤器像这样: public class TestAttribute : ActionFilterAttribute { private string _privateValue; public override void OnActionExecuting(ActionExecutingContext filterContext) { _privateValue = ... some calculation } public override void OnActionExecuted(ActionExecutedContext filterContext) { // use _privateValue here } } 但你应该这样写: public class TestAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var privateValue = ... some calculation filterContext.HttpContext.Items["__private_value__"] = privateValue; } public override void OnActionExecuted(ActionExecutedContext filterContext) { var privateValue = filterContext.HttpContext.Items["__private_value__"]; // use privateValue safely here } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC帖子没有填充模型
- asp.net core在linux上的部署调试
- asp.net-mvc-3 – mvc razor editortemplate中的脚本
- asp.net-mvc-3 – 从MVC 3中使用Razor View引擎的局部视图渲
- asp.net-core – 如何在中间件类中访问IHostingEnvironment
- asp.net-mvc – 禁用生产中的Glimpse和glimpse.axd
- asp.net-mvc – ASP.NET MVC – 如何获取一个URL而不是一个
- ASP .NET MVC Forms授权与Active Directory组
- asp.net-mvc – ASP.NET MVC 4 Catch-all仅在本地而不是在远
- asp.net-mvc – ASP.NET MVC UpdateModel()方法如何工作?
- asp.net-mvc – 如何在ASP.NET MVC 4中使用域组作
- ASP.NET MVC 2 – 如何使用IgnoreRoute忽略整个目
- ASP.NET中内联标记的全球化差异
- ASP.NET – 图像未显示
- asp.net-mvc – 命名空间’System.Web.Mvc’中不
- asp.net-web-api – 仅在第一个Web请求(WebAPI 2
- ASP.NET Core中间件实现分布式 Session
- asp.net-mvc – asp.net mvc viewmodels.它们应包
- asp.net – 浏览器关闭后的身份验证/会话cookie删
- WeihanLi.Npoi 根据模板导出Excel