web-dev-qa-db-ja.com

Href ASP.NET MVC / RazorのURLエンコード文字列

Razorを使用してHrefを作成しようとしています。文字列は次のようになります。

HTTPS://www.notmysite/controller/action ORDER_ID = XXXXXXX&hashComparator = iFxp3%2BszAMaEB%2FnHCtRr9Ulhv0DumtyDumCik4gKypJqi0BdOGXXsr9QDkfefAsLaR1Xy%2BrX9VcuzP1pF2k6dL%2F92UxphzTKqNAZP2SSZGWtvyO5az%2F9JvDY%2Bsq5TBQo7%2FYAAMIU4QxiSX1SBKk8SUNECW3ZmKM%3D

私のモデルでは、注文IDとハッシュ文字列を持っています。ルートは私のサイトの一部ではないので、@ Url.Actionのようなデフォルトのメソッドを使用できないため、プロトコルRequest.Urlを使用できません。他の場所で使用したようなスキーム。

したがって、現在、文字列関数を使用してこれを作成する方法を見つけようとしていますが、Url.Encode Url.EscapeDataString Html.Encodeを試しましたが、どこでも高速になりません:

<a href="@Uri.EscapeDataString("https://www.notmysite.co.uk/controller/action?order_ID=" + Model.bookingNumber + "&hashComparator=" + Model.hashCode)">Click Here to be transferred</a>

出力テキストには常にプラスとイコールが含まれており、機能しません。どの組み合わせが必要ですか?!

19
Chris Nevill

私はそれを行う方法を見つけました:

@{
  var url = string.Format(
      "https://www.notmysite.co.uk/controller/action?order_ID={0}&hashComparator={1}",
      @Uri.EscapeDataString(Model.bookingNumber.ToString()),
      @Uri.EscapeDataString(Model.hashCode));
}
 <p><a href="@url">Click Here to be transferred</a></p>

編集2015-Jerads投稿で述べたように、解決策は、URL全体ではなくクエリ文字列要素のみをエンコードすることです。これが上記の処理です。

40
Chris Nevill

問題は、URL全体をエンコードしようとしていることです。エンコードする必要があるのはクエリ文字列valuesのみで、これにはUrl.Encode()を使用できます。

アドレス、クエリ文字列パラメーター、または?および&区切り文字をエンコードしたくない場合、ブラウザーが解析できないアドレスになってしまいます。

最終的には、次のようになります。

<a href="https://www.notmysite.co.uk/controller/[email protected](Model.bookingNumber)&[email protected](Model.hashCode)">Click Here to be transferred</a>
2
Jerad Rose

これが私にとってこの問題に最初に出たリンクです。私はコアを使用しているので、答えは私にとってはうまくいきませんでした、と思います。これを追加したかったのです。

System.Net.WebUtility.UrlEncode(MyVariableName)

Url.Encodeが機能しない場合は、上記を試してください。また、前述のように、URL文字列全体でこれを使用しないでください。個々のクエリ文字列変数に使用してください。そうしないと、URLが機能しない可能性が高くなります。

0
Deathstalker