базовый метод не запущен в mvc 5

#c# #asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-5

#c# #asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-5

Вопрос:

У меня есть следующий базовый контроллер

 public class BaseController : Controller
{
   protected override void Execute(RequestContext requestContext)
   {

          base.Execute(requestContext);
   }
}
  

Реализация

   public class HomeController : BaseController { }
  

мы обновились с mvc3 до mvc5, в mvc5 этот метод не вызывается, что здесь нужно сделать?

Комментарии:

1. ваш элемент управления не поступает на basecontroller или что-то еще?

2. он попадает в BaseController, но не попадает в метод выполнения

3. Можете ли вы показать нам свою реализацию?

4. добавлена реализация, каждый контроллер в приложении реализует basecontroller

Ответ №1:

Не совсем понятно, что у вас после, но вот несколько вопросов. Ваши обычные контроллеры наследуют ваш BaseController?

 public class MyController : BaseController
  

Я не понимаю, для чего предназначена эта строка….

 var global = requestContext.HttpContext.Request.QueryString["global"] == null ? true : false;
  

Вы устанавливаете значение, а затем ничего с ним не делаете. Вы хотите сохранить это значение в базовом контроллере, чтобы вы могли получить к нему доступ со всех ваших других контроллеров?

И, конечно, если global отсутствует в строке запроса, то оно должно быть false, а не true.

 public class BaseController : Controller
{
   public bool isGlobal { get; private set; }

   protected override void Execute(RequestContext requestContext)
   {
      this.isGlobal = requestContext.HttpContext.Request.QueryString["global"] == null ? false : true;
      base.Execute(requestContext);
   }
}
  

Комментарии:

1. «Конечно», вы не знаете бизнес-правил, связанных с global флагом.

2. Я добавил, что, поскольку иногда это приложение вызывается из другого приложения Windows, предназначенного для внутреннего использования, вопрос, который этот метод выполнения не запускается в любое время, в чем причина

Ответ №2:

Название этого вопроса привело меня сюда, но на самом деле это не та проблема, с которой я столкнулся (т. Е. Переопределенный Execute метод в базовом классе контроллера, который не вызывается на веб-сайте MVC 4/5).

Если это проблема, с которой вы тоже столкнулись, это решение, которое я нашел. Похоже, способ вызова этих методов изменился с введением поддержки асинхронности. Вместо переопределения Execute метода вы должны переопределить OnActionExecuted метод вместо этого.

 protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
}