0

私の MVC アプリケーションでは、コントローラーは spring IOC をコントローラー ファクトリとして使用して作成されています。ユーザーがブラウザーで URL を編集して間違ったコントローラーを要求している場合、ブラウザーに「リソースが存在しません」というメッセージが表示されます。代わりに、アプリケーションのログイン ページに誘導したいと考えています。

 public class ControllerFactory : IControllerFactory
{
    private static readonly ILog log =
      LogManager.GetLogger(typeof(ControllerFactory));
    public IController CreateController(RequestContext requestContext, string controllerName)
    {
        log.Debug("ControllerFactory.CreateController :controllerName =" + controllerName);
        controllerName = controllerName.ToLower();
        IApplicationContext ctx = ContextRegistry.GetContext();
        Controller ControllerObj = null;

        if(ctx.ContainsLocalObject(controllerName))
        {
            ControllerObj = (Controller)ctx[controllerName];
            log.Debug("Controller Object is created :" + controllerName);
        }
        else
        {
               //Showing error message
            requestContext.HttpContext.Response.Write(String.Format("<br/><b><valign=\"center\"><Font Size=\"6\" Font Color=\"Red\"> The Resource {0} is not available</b>", controllerName));
         // **Insteadd of showing the above message I want to direct user to the login page.**
         // **"Account/Login"**
            log.Error("there is no controller defintion with " + controllerName);
            requestContext.HttpContext.Response.End();
        }
        return ControllerObj;
    }


    public SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName)
    {
        return SessionStateBehavior.Default;
    }

    public void ReleaseController(IController controller)
    {
        IDisposable disposable = controller as IDisposable;
        if (disposable != null)
        {
            disposable.Dispose();
        }
    }
}

エラー メッセージを表示する代わりに、ユーザーをログイン ページ ("/Account/Login") にリダイレクトするにはどうすればよいですか?

4

1 に答える 1

1

試しましたrequestContext.HttpContext.Response.Redirect(url)か?

UrlHelper にはハードコーディングされたコントローラーとアクション名もあると思います。

UrlHelper url = new UrlHelper(Request.RequestContext);
var result = url.Action("Login", "Account");

しかし、T4MVC(http://t4mvc.codeplex.com/) を使用すると、次のことができます。

var result = url.Action(MVC.Account.Login());
于 2012-10-18T08:15:36.703 に答える