[英]How to pass the model in Custom action filter in .Net core API
[英]how to pass ParentController Property to custom action filter?
我创建了一个具有3个属性的Custom Action Filter
,如下所示:
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中的EDIT baseUrl
必须是一个属性,因为以后的代码将从App.Config中读取它。
尝试在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
,如下ParentController' class Change the
baseUrl`,
//get the URL from App.Config and assign to baseUrl
public string baseUrl = "http://localhost:52985/api/";
更新AddLead
通过删除Action属性BaseUrl
财产,因为它是在处理TrackUser
行动过滤器类
[TrackUser(Service = service1, Pagecode = HealthUtil.PageCode.HealthHome)]
public ActionResult AddLead(leadViewModel leaddata)
{
//do something with the action
}`
您可以在ParentController
定义一个方法,如下所示:
public class ParentController : Controller
{
public string GetUrl()
{
return ConfigurationManager.AppSettings["AppUrl"];
}
}
然后,在过滤器类中,您可以调用父控制器的方法来获取网址,如下所示:
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
}
}
}
希望对您有所帮助,欢迎后续问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.