1

Мое решение содержит проект библиотеки классов как бизнес-библиотеку, и я написал в нем настраиваемый фильтр действий.MVC - Передача пользовательских параметров в настраиваемый фильтр действий

public class SampleFilterAttribute : ActionFilterAttribute, IExceptionFilter 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var parameters =filterContext.ActionDescriptor.GetParameters(); 
     var currentAction = filterContext.ActionDescriptor; 
    } 

Мое требование теперь передать некоторые другие параметры OnActionExecuted функции (например, имя пользователя, описание, которое я сохраню в базе данных).

Мои действия контроллера в проект приложения MVC выглядит следующим образом:

[SampleFilterAttribute] 
    public ActionResult PurchaseRequisition(int? ID) 
    { 

Так как я могу передать некоторые пользовательские параметры OnActionExecuted (Действие фильтра)?

ответ

0

Вы можете передать параметр в пользовательский фильтр атрибутов с помощью TempData, смотрите ниже:

SampleFilterAttribute

public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var actionDescriptor = filterContext.ActionDescriptor; 
     var controllerName = actionDescriptor.ControllerDescriptor.ControllerName; 
     var actionName = actionDescriptor.ActionName; 
     var userName = filterContext.HttpContext.User.Identity.Name; 
     var timeStamp = filterContext.HttpContext.Timestamp; 

     var parameters = filterContext.RouteData.Values["id"]; 
     var description = filterContext.Controller.TempData["Description"]; 

     base.OnActionExecuted(filterContext); 
    } 

Действие

[SampleFilter] 
    public ActionResult PurchaseRequisition(int? id) 
    { 
     TempData["Description"] = "This is Description"; 
     return View(); 
    } 
+0

Благодаря Лин, хотя я могу получить доступ данные теперь используют Tempdata [], но я не могу использовать filterContext.HttpContext .User.Identity.Name или filterContext.HttpContext.Timestamp, может быть, потому, что я пишу этот код в отдельном проекте класса. Какие-либо предложения? – hotcoder

+0

Если у вас несколько уровней в вашем решении, я предлагаю вам добавить атрибут пользовательского действия для вашего веб-уровня. Создайте вызов папки «Помощник», затем добавьте все настраиваемые атрибуты и расширения в эту папку. Прямо должно быть аналогично контроллеру и виду. – Lin