У меня проблема с ActionFilterAttriute, который неправильно перенаправляет. Я не знаком с полной кодовой базой, но я видел достаточно, чтобы не понимать, что происходит.
Чтобы упростить код, я удалил ненужные части:
public class ResolveApplicationRedirectAttribute : ActionFilterAttribute
{
//some variables
private ActionExecutingContext _filterContext;
protected string ApplicationRedirectUrl
{
get { return ConfigurationManager.AppSettings["ApplicationRedirectUrl"]; }
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
_filterContext = filterContext;
//a lot of logic that decide if we should redirect or not
//I added this after the other logic to make it always redirect regardless of what happens inside the logic above
_filterContext.Result = new RedirectResult(ApplicationRedirectResult);
}
}
[ResolveApplicationRedirect]
public ActionResult Index(CrmQueryStringParameters crmParameters){
//some logic
}
Обычно это работает, но когда приложение получает несколько запросов за короткий промежуток времени, вызывается метод Index, который перестает работать, потому что в представлении отсутствуют некоторые данные (мы знаем, что в нем отсутствуют данные. Вот почему мы хотите перенаправить).
Но теперь, когда я добавил _filterContext.Result = new RedirectResult(ApplicationRedirectResult)
в качестве последней строки метода OnActionExecuting
, как это возможно, что он все еще вызывает мой метод Action?
Есть ли какие-либо известные ошибки/краеугольные случаи/что-либо еще, что может заставить MVC игнорировать RedirectResult
, который я поместил в filterContext
, и все равно запустить метод действия?
Что-нибудь особенное, что может быть внутри логики OnActionExecuting, что может вызвать проблемы, даже если я установлю filterContext.Result в качестве последней строки. Любые исключения внутри атрибута должны просто взрывать его, а не пропускать атрибут и вызывать метод Action.
Любая помощь, чтобы указать мне в правильном направлении, будет оценена здесь.