#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)
{
}