0

ページを ASPX ファイルの安全な接続にリダイレクトしたいと考えています。

クライアントは、このような URL をコピーfoo.com.auしてブラウザーに貼り付けるよう求められます。

私は以下のコードをコード ビハインド ファイルで作業していますが、クライアントに提供された URL に含まれていないため、これがwww後にURL を更新するかどうか、いつ本番環境に展開されるのか疑問に思っています。https://wwwwww

protected override void OnPreInit(EventArgs e)
    {
        base.OnPreInit(e);
        if (!Request.IsLocal && !Request.IsSecureConnection)
        {
            string redirectUrl = Request.Url.ToString().Replace("http:", "https:");
            Response.Redirect(redirectUrl);
        }
    }
4

2 に答える 2

2

Request.Url を使用する代わりに、 Request.Url.AbsoluteUri を使用します。さらに、URL が小文字で入力されると想定しないでください。コードを次のように修正します。

if (!Request.IsLocal && !Request.IsSecureConnection)
{
    if (Request.Url.Scheme.Equals(Uri.UriSchemeHttp, StringComparison.InvariantCultureIgnoreCase))
    {
        string sNonSchemeUrl = Request.Url.AbsoluteUri.Substring(Uri.UriSchemeHttp.Length);
        // Ensure www. is prepended if it is missing
        if (!sNonSchemeUrl.StartsWith("www", StringComparison.InvariantCultureIgnoreCase)) {
            sNonSchemeUrl = "www." + sNonSchemeUrl;
        }
        string redirectUrl = Uri.UriSchemeHttps + sNonSchemeUrl;
        Response.Redirect(redirectUrl);
    }
}

これを行うと、変更されるのはスキーマだけです。したがって、absoluteUri が

http://foo.com.au

に変更されます

https://foo.com.au

最後に 1 つ注意してください。これを行ったとき、OnPreInit で試したことはありません。このロジックは常に Page_Load で実行します。ページのライフサイクルのその部分でリダイレクトすることで、どのような影響があるかはわかりませんが、問題が発生した場合は、それを Page_Load に移動できます。

于 2013-07-04T02:03:36.677 に答える
0

これは、リクエストが通過し、通過しhttps://fooないことを説明するための私の最終的な実装でしたhttps://www.foo

        if (!Request.IsLocal &&
            !Request.Url.AbsoluteUri.StartsWith("https://www.", StringComparison.OrdinalIgnoreCase))
        {
            string translatedUrl;
            string nonSchemeUrl = Request.Url.AbsoluteUri;
            string stringToReplace = (Request.Url.Scheme == Uri.UriSchemeHttp ? Uri.UriSchemeHttp + "://" : Uri.UriSchemeHttps + "://");
            nonSchemeUrl = nonSchemeUrl.Replace(stringToReplace, string.Empty);
            if (!nonSchemeUrl.StartsWith("www", StringComparison.InvariantCultureIgnoreCase))nonSchemeUrl = "www." + nonSchemeUrl;
            translatedUrl = Uri.UriSchemeHttps + "://" + nonSchemeUrl;
            Response.Redirect(nonSchemeUrl);
        }
于 2013-07-04T22:53:47.240 に答える