2

私はリピーターを持っています。リピーターの中にはボタンがあります。アイテムコマンドで試してみます

protected void rptPost_ItemCommand(object source, RepeaterCommandEventArgs e)
{
 int contentID = Int32.Parse(e.CommandArgument.ToString());//Its return 1
 string host = HttpContext.Current.Request.Url.ToString();//its return http://localhost:1377/Forum.aspx
 //string URL = "~/Modules/Forum/PostDetails.aspx?ID=" + contentID +"&BackUrl=" + host;//Need help hear its not work
 string URL = "~/Modules/Forum/PostDetails.aspx?ID="  + contentID ;//Its work
 Response.Redirect(URL); 

}

仕事を渡そうとしただけIDなのに、multipal urlを渡そうとするIDと、次はCurrent Page Urlページが見つからないということですpage not found error。問題を理解できません。Urlパラメータとして渡すことはサポートされていないか、何かが足りません。ありがとう。

4

1 に答える 1

7

解決策は次のとおりです。

host = HttpUtility.UrlEncode(host)

そしてここにそれが機能する理由があります:

ホストURLをGETパラメーターとして渡します。GETパラメータは、リダイレクトのGETURIの一部です。URI構文には、特別な意味を持つ文字が含まれています。特に、URI文字列で特別な意味を持つコロン(:)とスラッシュ(/)を使用しています。ほとんどの場合、GETパラメータデータ値の一部として特殊文字を使用しないでください。

特殊文字を含める必要があるあなたのような場合のために、UrlEncodingが開発されました。UrlEncoding、またはパーセントエンコードは、URIの特殊文字を、パーセント記号を使用してエンコードされた値に置き換えます。これらのエスケープシーケンスは、URIクエリ処理の一部として自動的に元の特殊文字に変換されます。このHttpUtilityクラスはUrlEncode、入力文字列内のすべての特殊文字をエスケープする便利な方法としてメソッドを提供します。

渡されるデータを完全に制御でき、エンコードが不要であることを保証できる場合を除いて、GETパラメータを介して渡すすべてのデータをURLエンコードすることをお勧めします。最初のURLエンコードなしでユーザー入力をGETパラメーターに渡すと、攻撃者が新しいパラメーターを含めたり、URIを操作したりする可能性があるため、これはセキュリティの問題になる可能性があります。

于 2012-04-18T04:43:55.890 に答える