これは非常に簡単な作業であるはずです - ベースコントローラーからリダイレクトします。これは参考例ですが、私が経験しているエラーについては触れていません: Redirecting from OnActionExecuting in a Base Controller
コード:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (myObject == null) {
// System.InvalidOperationException: The matched route does not include a 'controller' route value, which is required.
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary {{ "controller", "controllerName"}, {"action", "actionName"}});
// Throws the same exception:
filterContext.Result = RedirectToAction("actionName", "controllerName");
}
}
レンダリングされた URL:
http://localhost/controllerName/actionName?controller=controllerName&action=actionName
デバッグ時に、Result プロパティに渡されるリダイレクト オブジェクトには、コントローラーとアクションの値の両方が含まれます。また、返された URL にも含まれています。
質問:
コントローラーの値がないと不平を言っているのはなぜですか? また、通常の形式に加えて、クエリ文字列にコントローラーとアクションの値が表示されるのはなぜですか?
更新しました:
// hard coded URL produces the same result. What am I misunderstanding?
filterContext.Result = new RedirectResult("~/Employee/Create");