如何将ParentController属性传递给自定义操作筛选器
本文关键字:自定义 操作 筛选 ParentController 属性 | 更新日期: 2023-09-27 18:29:19
我创建了一个Custom Action Filter
,它有以下3个属性:
public class TrackUser : ActionFilterAttribute, IActionFilter
{
public string BaseUrl { get; set; }
public string Service { get; set; }
public HealthUtil.PageCode Pagecode { get; set; }
public void OnActionExecuting(ActionExecutingContext filterContext)
{
// Some logic to execute
}
}
我正在尝试使用这个客户行动过滤器与我的行动如下:
[TrackUser(BaseUrl =baseUrl, Service =service1, Pagecode =HealthUtil.PageCode.HealthHome)]
public ActionResult AddLead(leadViewModel leaddata)
{
}
属性baseUrl
在ParentController类中定义如下:
public static string baseUrl
{
get { return "http://localhost:52985/api/"; }
//set { baseUrl = value; }
}
问题是我无法将baseUrl
传递到操作筛选器。我收到以下错误消息:
属性参数必须是属性参数类型的常量表达式、typeof表达式或数组创建表达式
请指导并帮助我解决这个问题。
编辑ParentController中的baseUrl
必须是一个属性,因为稍后的代码将从App.Config.
您可以在ParentController
中定义一个方法,如下所示:
public class ParentController : Controller
{
public string GetUrl()
{
return ConfigurationManager.AppSettings["AppUrl"];
}
}
然后在您的过滤器类中,您可以调用父控制器的方法来获得如下url:
public class TrackUser : ActionFilterAttribute, IActionFilter
{
public string BaseUrl { get; set; }
public string Service { get; set; }
public void OnActionExecuting(ActionExecutingContext filterContext)
{
// Some logic to execute
var controller = filterContext.Controller as ParentController;
if (controller != null)
{
var url = controller.GetUrl();
// Use it here
}
}
}
希望这有帮助,欢迎跟进问题!
尝试在ParentConroller类中更改baseUrl属性的定义,如下所示。
public const string baseUrl = "http://localhost:52985/api/";
将以下代码添加到TrackUser
类的OnActionExecuting
方法中
public void OnActionExecuting(ActionExecutingContext filterContext)
{
//get hold of the controller
var controller = filterContext.Controller as ParentController;
//assign the BaseUrl property from tye ParentController and use it as required
BaseUrl = controller.BaseUrl;
// Some logic to execute
}
在下面的ParentController' class Change the
baseUrl中,
//get the URL from App.Config and assign to baseUrl
public string baseUrl = "http://localhost:52985/api/";
通过删除BaseUrl
属性来更新AddLead
Action属性,因为它是在TrackUser
Action筛选器类中处理的
[TrackUser(Service = service1, Pagecode = HealthUtil.PageCode.HealthHome)]
public ActionResult AddLead(leadViewModel leaddata)
{
//do something with the action
}`