0

私の IIS7 には ASP.NET WebForms サイトがあり、クエリ文字列でキリル文字を使用しています。HttpUtility.UrlEncodeリダイレクトするときにパラメーターに使用します。最終的には次のようなURLがあります。

http://mysite.com/Search.aspx?SearchText=текст

SearchTextパラメータ値(インクルード関数)を読み取ろうとするとHttpUtility.Decode()、間違った値が返されますが、返さÑекÑÑれるはずですтекст

ASP.NET 開発者サーバーの localhost では動作しますが、IIS7 (ローカル IIS7 を含む) では動作しません。

<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

しかし、それでも機能しません。

どんな助けにも感謝します、

どうもありがとう!

4

3 に答える 3

1

値を ToBase64String に変換することで、同じ問題を解決しました。

  1. ターゲット ページにリダイレクトする前に、値をエンコードしました。

        Dim Data() As Byte  'For the data to  be encoded
    
        'Convert the string into a byte array
        Dim encoding As New System.Text.UTF8Encoding
        Data = encoding.GetBytes(ParamToPass)
    
        'Converting to ToBase64String
        Dim EncodedStringToPass as string = Convert.ToBase64String(Data)
    
        Page.Response.Redirect("TargetPage.aspx?Param=" & EncodedStringToPass, False)
    
  2. ターゲット ページで:

        Dim Data() As Byte  'For the data to  be decoded
        Data = Convert.FromBase64String(Page.Request.Params("Param"))
    
        Dim encoding As New System.Text.UTF8Encoding
        Dim ParamToPass As String = encoding.GetString(Data)
    

PS この方法の唯一の欠点は、ブラウザの URL 文字列でパラメータの実際の値を確認できないことです。しかし、私の場合、これは問題になりませんでした

于 2017-02-04T22:58:28.233 に答える
1

問題は実際には、Web アプリケーションで使用する UrlRewriting.net にありました。

于 2013-06-04T17:56:33.210 に答える
0

関数を使用するredirect場合、はい、その中にこの呼び出しがあります

url = UrlEncodeRedirect(url);

それはキリル文字、ギリシャ文字、そしておそらく他の文字を壊します。私がよく覚えていれば (この問題は数か月前の私の経験からのものなので覚えていると言いました)、文字の区切りは?記号の後にあります。いずれにせよ、私は同じ問題を抱えています。

可能な解決策:

  • オリジナルのリダイレクトほど良くないかもしれませんが、この問題を回避できます。
  • リダイレクト ロジックに代わる方法を見つけてください。
  • リダイレクトによって変更されない有効な URL 文字のみを使用するカスタム テキスト エンコードを作成し、再度デコードして戻します。そのマイナス点は、それが隠しテキストのようになり、目に見えない読み取り可能な検索ワードになることです.

これはリダイレクトの非常に基本的なものです。

public static void RedirectSimple(string url, bool endResponse)
{
    HttpResponse MyResponse = HttpContext.Current.Response;

    MyResponse.Clear();
    MyResponse.TrySkipIisCustomErrors = true;
    MyResponse.StatusCode = 302;
    MyResponse.Status = "302 Temporarily Moved";
    MyResponse.RedirectLocation = url;

    MyResponse.Write("<html><head><title>Object moved</title></head><body>\r\n");
    MyResponse.Write("<h2>Object moved to <a href=\"" + url + "\">here</a>.</h2>\r\n");
    MyResponse.Write("</body></html>\r\n");

    if (endResponse){
        MyResponse.End();
    }
}

これを関数にして、正しく動作するかどうかを試すことができます。

于 2013-06-04T16:02:15.087 に答える