3

これはstackoverlowに関する私の最初の投稿であり、他の投稿でこれに対する解決策を見つけることができなかったので、ここに行きます:

URL で 2 つのクエリ文字列を送信している Web ページがあります。

example.aspx?name=<%=name%>&sku=<%=sku%>

Request.QueryString["name"];次に、 と を使用して値を収集します。Request.QueryString["sku"];

クエリ文字列を送信するページのソースで URL を表示すると、すべて問題ないように見えますが、「name」にスラッシュ (/) が含まれていると、値を取得するときに「sku」の末尾に追加されます。クエリ文字列。/ を %2F に置き換えようとしましたが、うまくいきません。「名前」クエリ文字列にスラッシュが含まれていない場合、すべてが正しく見えます。

何か案は?

編集:正しく動作させるために、二重エンコード(server.urlencode)と二重デコードが必要になりました。ご助力いただきありがとうございます!

4

3 に答える 3

4

実際には、 HttpServerUtility.UrlEncodeメソッドを使用して URL の値をエンコードする必要があります。

example.aspx?name=<%=Server.UrlEncode(name)%>&sku=<%=Server.UrlEncode(sku)%>

URL エンコーディングにより、すべてのブラウザーが URL 文字列内のテキストを正しく送信できるようになります。クエスチョン マーク (?)、アンパサンド (&)、スラッシュ マーク (/)、およびスペースなどの文字は、一部のブラウザーで切り捨てられたり、破損したりする場合があります。その結果、これらの文字はタグまたはクエリ文字列でエンコードする必要があります。これらの文字列は、ブラウザーが要求文字列で再送信できます。

編集:

あなたが提供した値でこれを確認しましょう: name = Bellagio™ 16 1/2" High Downbridge Outdoor Wall Light, sku = 46910: まず、2 つのプロパティを持つページを作成しました:

public string Name
{
    get
    {
        return "Bellagio™ 16 1/2\" High Downbridge Outdoor Wall Light";
    }
}

public string Sku
{
    get
    {
        return "46910";
    }
}

次に、ページにリンク定義を追加します。

<a href='1.aspx?name=<%=Server.UrlEncode(Name)%>&sku=<%=Server.UrlEncode(Sku)%>'>
    this is a link
</a>

次に、これらの値を取得します (最初にリンクをクリックします)。

protected void Page_Load(object sender, EventArgs e)
{
    var name = Request.QueryString["name"];
    var sku = Request.QueryString["sku"];
}

これらの値は、指定したものとまったく同じです:Bellagio™ 16 1/2\" High Downbridge Outdoor Wall Lightおよび46910.

残念ながら、最初のコメントで投稿された間違った URL を再現できませんでした:LifeSizePDF.aspx?productname=Bellagio&amp;%238482%3b+16+1%2f2&amp;quot%3­b+High+Downbridge+Outdoor+Wall+Light&amp;shortsku=46910%2f

于 2011-03-03T19:27:58.167 に答える
2

名前のスラッシュが意図的であり、最終結果で抽出されることを前提として、URL エンコーディングを使用して値を適切にフォーマットします。

これを簡単に行うには少なくとも 2 つの方法があることに注意してください。たとえば、静的クラスを使用するHttpUtilityか、 のコンテキストでプロパティPageを使用しServerます。

var encodedValue = HttpUtility.UrlEncode(rawValue);

var encodedValue = Server.UrlEncode(rawValue);
于 2011-03-03T19:27:41.147 に答える
0

Sku リクエストの終了値をトリムするだけです。

Request.QueryString["sku"].TrimEnd( '/' );
于 2011-03-03T19:25:23.030 に答える