Итак, я создал свой собственный ControllerFactory, и я перегружаю GetControllerSessionBehavior, чтобы расширить поведение MVC.RequestContext - RouteData не содержит действия
Чтобы выполнить свою собственную работу, я должен использовать отражение на вызываемом действии. Однако я наткнулся на странный вопрос - я не могу получить действие путем доступа RequestContext.RouteData
При настройке образца воспроизведения для этого я не был в состоянии воспроизвести ошибку.
Кто-нибудь знает о возможных причинах этого или знает, как получить действие, вызвав метод с другим контекстом запроса, кроме этого?
public class CustomControllerFactory : DefaultControllerFactory
{
protected override SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, Type controllerType)
{
if (!requestContext.RouteData.Values.ContainsKey("action"))
return base.GetControllerSessionBehavior(requestContext, controllerType);
var controllerAction = requestContext.RouteData.Values["action"];
var action = controllerAction.ToString();
var actionMethod = controllerType.GetMember(action, MemberTypes.Method, BindingFlags.Instance | BindingFlags.Public).FirstOrDefault();
if(actionMethod == null)
return base.GetControllerSessionBehavior(requestContext, controllerType);
var cattr = actionMethod.GetCustomAttribute<SessionStateActionAttribute>();
if (cattr != null)
return cattr.Behavior;
return base.GetControllerSessionBehavior(requestContext, controllerType);
}
}
Действие, которое я могу назвать только штраф, но не может получить доступ к имени действия в рамках моего контроллера завода:
[Route("Open/{createModel:bool?}/{tlpId:int}/{siteId:int?}")]
public ActionResult Open(int tlpId, int? siteId, bool? createModel = true)
{
}
Любые идеи приветствуются.
Update:
Проблема, как представляется, связаны с атрибутом маршрутизации. Пока он работает нормально, он не работает для меня.
Обнаружено это в пути - после ответа this я также получу свое надлежащее решение.
Update 2:
Интересно. Воспроизведение MVC Version 5.0.0.0, Production 5.2.2. Возможное введение ошибки?
В чем проблема? Does 'requestContext.RouteData.Values [" action "]' возвращает 'null'? – haim770
да. в зависимости от версии mvc – Dbl