2

私のサイトには、http でアクセスされるパブリック セクションと、ログインが必要な https 部分があります。サイトからログアウトすると、http パブリック インデックス ページにリダイレクトされます。

以前は、指し示す完全な URL も指定してこれを行っていました。最近、テストのためにサイトを多数のドメインで実行できるように、そのようなものを取り除く必要がありました。

UriBuilder を使用して https リンクを http リンクに変換して、Web サイトが特定の URL を直接指す必要がないようにしました。これにより、サイトは任意のドメイン名を使用できるようになります。現在、それはコンピューター名を指しています。

if (Request.IsSecureConnection)
{
    UriBuilder ub = new UriBuilder();
    ub.Path = "/html/index.html";
    ub.Scheme = Uri.UriSchemeHttp;
    ub.Port = -1; // use default port for scheme
    Response.Redirect(ub.Uri.ToString(), true);

    //An old direct link to the site
    //Response.Redirect("http://www.someaddress.com/html/index.html");
}

正しいドメインを指すのではなく、テストサーバーでコードがリモートでトリガーされると、アドレスに戻ります

http://localhost/html/index.html

それ以外の

http://testserver/html/index.html

サーバーに接続しているアドレスを返す代わりに、なぜこれを行っているのかわかりません。

4

2 に答える 2

1

ホストを指定しない場合は、デフォルトのホスト ( "localhost") が使用されます。MSDN のUriBuilder()コンストラクターに関する記事を参照してください。

修正: ホストを指定します (おそらく受信要求のホストに基づいています)。

 ub.Host = GetMeIncomingHost();
于 2013-12-16T19:38:47.510 に答える
0

リダイレクト先の URI で、機関(ホスト)を指定していないためです。したがって、リダイレクトは302 FoundHTTP ステータスを送信し、応答にはlocation:次のようなヘッダーが含まれます。

location: /html/index.html

これは、リダイレクトされたリクエストの発信元である現在の URI に相対的な相対URI です。つまり、要求ページのスキームと権限コンポーネントを継承したことを意味します (明らかに、あなたの場合はhttp://localhost:xx/....

これを修正するUriBuilderには、コンストラクターに をシードしますHttpContext.Current.Request.Url。それはそれを行うべきです:

UriBuilder ub = new UriBuilder( HttpContext.Current.Request.Url );
ub.Path   = "/html/index.html";
Response.Redirect(ub.Uri.ToString(), true);
于 2013-12-16T20:45:15.457 に答える