通常、私はただ使用します:
HttpContext.Current.Server.UrlEncode("url");
ただし、これはコンソール アプリケーションでHttpContext.Current
あるため、常にnull
.
私が使用できる同じことを行う別の方法はありますか?
これを試して!
Uri.EscapeUriString(url);
または
Uri.EscapeDataString(data)
System.Web を参照する必要はありません。
編集:詳細については、別のSO回答を参照してください...
私は.NETの人ではありませんが、使用できません:
HttpUtility.UrlEncode Method (String)
ここで説明されているもの:
Ian Hopkinsのコードは、System.Webへの参照を追加しなくても、私に代わってトリックを実行します。VB.NETを使用していない人のためのC#への移植は次のとおりです。
/// <summary>
/// URL encoding class. Note: use at your own risk.
/// Written by: Ian Hopkins (http://www.lucidhelix.com)
/// Date: 2008-Dec-23
/// (Ported to C# by t3rse (http://www.t3rse.com))
/// </summary>
public class UrlHelper
{
public static string Encode(string str) {
var charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"));
return Regex.Replace(str,
String.Format("[^{0}]", charClass),
new MatchEvaluator(EncodeEvaluator));
}
public static string EncodeEvaluator(Match match)
{
return (match.Value == " ")?"+" : String.Format("%{0:X2}", Convert.ToInt32(match.Value[0]));
}
public static string DecodeEvaluator(Match match) {
return Convert.ToChar(int.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber)).ToString();
}
public static string Decode(string str)
{
return Regex.Replace(str.Replace('+', ' '), "%[0-9a-zA-Z][0-9a-zA-Z]", new MatchEvaluator(DecodeEvaluator));
}
}
使いたくなる
System.Web.HttpUtility.urlencode("url")
プロジェクトの参照の 1 つとして system.web があることを確認してください。コンソール アプリケーションにデフォルトでリファレンスとして含まれているとは思いません。
名前空間WebUtility.UrlEncode(string)
から使用System.Net
HttpUtility クラスで UrlEncode メソッドを使用してみてください。
私は自分でこの問題に遭遇し、System.Web アセンブリをプロジェクトに追加するのではなく、URL をエンコード/デコードするためのクラスを作成しました (非常に単純で、いくつかのテストを行いましたが、それほど多くはありません)。以下にソースコードを含めました。お願い: これを再利用する場合はコメントを一番上に残してください。壊れても私を責めないでください。コードから学んでください。
''' <summary>
''' URL encoding class. Note: use at your own risk.
''' Written by: Ian Hopkins (http://www.lucidhelix.com)
''' Date: 2008-Dec-23
''' </summary>
Public Class UrlHelper
Public Shared Function Encode(ByVal str As String) As String
Dim charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"))
Dim pattern = String.Format("[^{0}]", charClass)
Dim evaluator As New MatchEvaluator(AddressOf EncodeEvaluator)
' replace the encoded characters
Return Regex.Replace(str, pattern, evaluator)
End Function
Private Shared Function EncodeEvaluator(ByVal match As Match) As String
' Replace the " "s with "+"s
If (match.Value = " ") Then
Return "+"
End If
Return String.Format("%{0:X2}", Convert.ToInt32(match.Value.Chars(0)))
End Function
Public Shared Function Decode(ByVal str As String) As String
Dim evaluator As New MatchEvaluator(AddressOf DecodeEvaluator)
' Replace the "+"s with " "s
str = str.Replace("+"c, " "c)
' Replace the encoded characters
Return Regex.Replace(str, "%[0-9a-zA-Z][0-9a-zA-Z]", evaluator)
End Function
Private Shared Function DecodeEvaluator(ByVal match As Match) As String
Return "" + Convert.ToChar(Integer.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber))
End Function
End Class
Kibbeeが本当の答えを提供します。はい、HttpUtility.UrlEncodeは使用するのに適切なメソッドですが、コンソールアプリケーションではデフォルトで使用できません。System.Webへの参照を追加する必要があります。そのためには、
これで、UrlEncodeメソッドを使用できます。あなたはまだ追加したいと思うでしょう、
System.Webを使用する
コンソールアプリの上部で、またはメソッドを呼び出すときに完全な名前空間を使用します。
System.Web.HttpUtility.UrlEncode(someString)
System.Web の HttpUtility.UrlEncode("url")。
静的 HttpUtility.UrlEncode メソッドを使用します。
最善の方法は、System.web..dll への参照を追加することです。
var EncodedUrl=System.Web.HttpUtility.UrlEncode("URL_TEXT"); を使用します。
ファイルはSystem.web.dllにあります。