ASP.NET CoreでのURLエンコードとデコード


113
HttpContext.Current.Server.UrlEncode

.NET Frameworkでのみ機能します。ASP.NET CoreプロジェクトでURI引数をエンコードまたはデコードするにはどうすればよいですか?


2
ASP.NET Core、または非WebプロジェクトにはHttpContextはありません。同じメソッドは、Uriクラスのメソッドを通じて利用できます。たとえば、Uri.EscapeDataStringUri.EscapeUriString
Panagiotis Kanavos

1
@PanagiotisKanavos WRONGは-そこにはありませんHttpContext.Currentが、HttpContextネットコアの一部です- Microsoft.AspNetCore.Http.HttpContext。このことを覚えておいてください
J. Doeの

コメント全体を必ずお読みください。あなたが言及するのHttpContextがあるVERYのHttpContext以前のバージョンの異なります。それはですはるかに一般的なウリのメソッドを使用する
パナギオティスKanavos

回答:


186
  • ASP.NET Core 2.0+の場合は、System.Net名前空間を追加するだけです- WebUtilityクラスはSystem.Runtime.Extensions、ASP.NET Coreプロジェクトでデフォルトで参照されるnugetパッケージの一部として出荷されます。

  • 以前のバージョンの場合は、Microsoft.AspNetCore.WebUtilitiesnugetパッケージを追加します。

その後、WebUtilityクラスが利用可能になります:

public static class WebUtility
{
    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);
}

6
SDK 2.0.0以降では機能しませんでしたが、Manuel Alvesの回答(System.Net.WebUility)は機能しました。
matt.chatterley 2018


43

ASP.Net Core 2.0+の場合、およびスペースを次のようにエンコードする必要がある場合 %20

とは対照的に+;

使用する:

 Uri.EscapeDataString(someString);

2

あなたの時間を無駄にしないでください、私はこれらのいわゆるurlエンコーダーで多くの経験を持っています。それらはすべて役に立たず、異なる癖があります。たとえば、WebUtility.UrlEncodeは「+」記号を処理しません。

URLパラメータをエンコードする場合は、BASE58エンコードを使用します。アルファベット+数字のみを使用するため、URLエンコードする必要はありません。


+これらすべての癖を説明できますか?QueryHelpers.AddQueryStringまたはUri.EscapeDataStringが行わない+についてはよく知っています。
マイケル、

試したところWebUtility.UrlEncode、プラス記号( "+")が "%2B"に見事に変換されました。.NET Core 3.1を使用しています。
Dejan

0

私はリダイレクトを使用していますが、UrlEncodeはURL全体をエンコードするため機能しませんでした。代わりに、次に示すUriHelper.Encodeを使用してこれを解決しました。

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.