正しくリダイレクトされないActionFilterAttriuteに問題があります。私は完全なコードベースに精通していませんが、何が起こっているのか分からないほど十分に見てきました。コードをsimplyfyするActionFilterAttributeがリダイレクトされない
、私は関係ない部分を削除した:
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
}
これは通常動作しますが、アプリケーションを短時間でいくつかの要求に見舞わ取得したときに、インデックスの方法はされて終わりますビューに一部のデータが欠落しているため(データが欠落していることがわかっています)、リダイレクトする必要があります。
しかし、今度は、メソッドの最後の行に_filterContext.Result = new RedirectResult(ApplicationRedirectResult)
を追加しましたが、それでも私のActionメソッドを呼び出すことは可能でしょうか?
MVCがfilterContext
に入れたRedirectResult
を無視してアクションメソッドを起動させる原因となる既知のバグやコーナーケースなどがありますか?
最後の行としてfilterContext.Resultを設定しても問題を引き起こす可能性がある、OnActionExecutingのロジック内にある特殊なものは何でもあります。属性内の例外はすべて吹き飛ばすだけで、属性をスキップしてActionメソッドを呼び出す必要はありません。
正しい方向に私を指す助けがあれば、ここで感謝します。
MVCのソースコードを見ると、ActionExecutingContextを渡すフィルタでOnActionExecutingを実行するメソッドInvokeActionMethodFilterが表示されます。 null以外のResult値が返された場合は、アクションを呼び出すことをスキップしてActionExecutedContextを返します。だから、あなたが見ていることは不可能ではありません。したがって、唯一の問題はResultのnull値になる可能性があります。あなたのロジックをすべてコメントし、最後の行だけを残しておけば、あなたのリダイレクトは動作していますか? –