Я ввел _serviceOne
в мой контроллер, у которого есть метод, который возвращает значение int
. Я пытаюсь передать это значение в свой фильтр пользовательских действий.
Это не работает, и я получаю сообщение об ошибке: An object reference is required for the non-static field, method, or property 'NameController._serviceOne'
, где я пытаюсь установить Number = _serviceOne.GetIntNumber
.
Я знаю, что могу получить доступ к значению, если оно находится внутри контроллера (например: параметр контроллера, ViewBag, ViewData, переменная в контроллере), но я хочу передать значение в свойство Number
фильтра CustomActionFilter
.
Фильтр и метод обслуживания работают так, как я хочу, но он не позволит мне передать значение из _serviceOne.GetIntNumber
в фильтр. Почему это не работает, и как я могу заставить его работать?
NameController.cs:
public class NameController : Controller
{
private readonly ServiceOne _serviceOne;
public NameController(ServiceOne serviceOne)
{
_serviceOne = serviceOne;
}
[CustomActionFilter(Name = "CorrectName", Number = _serviceOne.GetIntNumber)] //does not work
[HttpGet]
public IActionResult Index()
{
return View();
}
}
CustomActionFilter.cs:
public class CustomActionFilter : ActionFilterAttribute
{
public string Name { get; set; }
public int Number { get; set; }
public override void OnActionExecuted(ActionExecutedContext context)
{
if (Name == "CorrectName" && Number == 1) {
RouteValueDictionary routeDictionary = new RouteValueDictionary { { "action", "SomeAction" }, { "controller", "NameController" } };
context.Result = new RedirectToRouteResult(routeDictionary);
}
base.OnActionExecuted(context);
}
}