gpt4 book ai didi

asp.net-mvc - 在方法中获取 ActionFilterAttribute 的实例

转载 作者:行者123 更新时间:2023-12-01 02:53:38 25 4
gpt4 key购买 nike

我是 ASP.NET MVC 平台的新手,我遇到了以下问题。

我正在使用 ActionFilterAttribute 在操作方法运行之前和之后做一些日常工作。问题是我需要在 action 方法中获取属性的实例来读取在 OnActionExecuting 方法中设置的一些属性。例如

public class SomeController : Controller{

public SomeController(){ }

[Some]
public ActionResult Index(){
SomeModel = someRepository.GetSomeModel();

//get instance of some attribute and read SomeProperty

return View(SomeModel);
}

}


public class SomeAttribute : ActionFilterAttribute{

public int SomeProperty { get; set; }

public SomeAttribute(){ }

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var parameters = filterContext.ActionParameters;
//Here to set SomeProperty depends on parameters
}

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
//do some work
}
}

有任何想法吗?

最佳答案

过滤器属性 必须被设计为线程安全的。该框架不保证过滤器属性的单个实例一次只能服务一个请求。鉴于此,您不能从 OnActionExecuting/OnActionExecuted 方法中改变属性实例状态。

考虑其中之一作为替代方案:

  • 使用 HttpContext.Items 将值存储在 OnActionExecuting 中,然后从 action 方法中读取它。您可以通过传递给 OnActionExecuting 的 filterContext 参数访问 HttpContext。
  • 将属性而不是属性放在 Controller 上,然后让 OnActionExecuting 方法将 Controller 转换为 SomeController 并直接从该方法中设置属性。这将起作用,因为框架默认保证 Controller 实例是 transient 的;单个 Controller 实例永远不会为多个请求提供服务。
  • 关于asp.net-mvc - 在方法中获取 ActionFilterAttribute 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3908841/

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