2

問題がありました (asp.net 3.5): https://mypage.netに移動すると、 https ://mypage.net/Login.aspx?ReturnUrl=%2fにリダイレクトされ、ログインできませんでした ( ReturnUrl の =%2f)。

これを解決するために、global.aspx Application_BeginRequest を変更しました。

     protected void Application_BeginRequest(object sender, EventArgs e)
    {
        // redirect user from http to https
        if (!Request.IsLocal && !Request.IsSecureConnection)
        {
            string redirectUrl = Request.Url.ToString().Replace("http:", "https:");
            Response.Redirect(redirectUrl);
        }

        // I HAVE ADDED THESE LINES!!!!!!!!!!!!!!
        if (Request.AppRelativen aCurrentExecutionFilePath == "~/")
            HttpContext.Current.RewritePath("Login.aspx");
    }

今では完璧に機能しているように見えますが、そうではありません。

問題は、 https ://mypage.net/QAからアクセスできる別の仮想アプリケーションがあることです 。 https://mypage.net/QA/login.aspx を直接入力する と、すべて問題ありません。

しかし、https: //mypage.net/QA と入力すると、「仮想パス '/Login.aspx' は別のアプリケーションにマップされていますが、これは許可されていません」と表示されます。

  • https://mypage.net/QAを使用すると、エラーが発生します
  • https://mypage.net/QA/を使用すると、エラーは発生せず、Lo​​gin.aspx が読み込まれます
  • また、global.aspx を変更しようとしました: HttpContext.Current.RewritePath("* ~/ *Login.aspx"); しかし、この場合、https: //mypage.net/qa を実行すると、アプリケーションは、仮想アプリケーションの QA ではなく、 https: //mypage.net にいると認識します。

これにどのように対処しますか?

4

1 に答える 1

0

たぶん、物理ファイルではなく論理的に物事をルーティングするために、このようなことをしてください

http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx

    //-----------------------------------------------------------------------------------
    // Name:        RegisterRoutes
    // Purpose:     Register the routes for the site.
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("admin/errorlog.axd/{*pathInfo}");

        routes.MapRoute(
            "Base", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Base", action = "Main", id = UrlParameter.Optional }  // Parameter defaults
        );
    }


    //-----------------------------------------------------------------------------------
    // Name:        Application_Start
    // Purpose:     The application start event handler.
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        InitSquishIt();
    }
于 2013-02-18T01:51:35.737 に答える