我创建了一个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中读取它。
答案 0 :(得分:0)
尝试在ParentConroller类中更改baseUrl属性的定义,如下所示。
public const string baseUrl = "http://localhost:52985/api/";
击> <击> 撞击>
将以下代码添加到OnActionExecuting
类
TrackUser
方法中
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/";
通过删除AddLead
属性更新BaseUrl
操作属性,因为它在TrackUser
操作过滤器类
[TrackUser(Service = service1, Pagecode = HealthUtil.PageCode.HealthHome)]
public ActionResult AddLead(leadViewModel leaddata)
{
//do something with the action
}`
答案 1 :(得分:0)
您可以在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
}
}
}
希望这会有所帮助,欢迎提出问题!