UrlEncode من خلال تطبيق وحدة التحكم؟
سؤال
عادةً سأستخدم فقط:
HttpContext.Current.Server.UrlEncode("url");
ولكن بما أن هذا هو تطبيق وحدة التحكم، HttpContext.Current
سيكون دائما null
.
هل هناك طريقة أخرى تفعل نفس الشيء يمكنني استخدامها؟
المحلول
جرب هذا!
Uri.EscapeUriString(url);
أو
Uri.EscapeDataString(data)
لا حاجة للإشارة إلى System.Web.
يحرر: لطفا أنظر آخر لذا أجب للمزيد...
نصائح أخرى
أنا لست من مستخدمي .NET، لكن، ألا يمكنك استخدام:
HttpUtility.UrlEncode Method (String)
والذي تم وصفه هنا:
الكود من Ian Hopkins يقوم بالخدعة بالنسبة لي دون الحاجة إلى إضافة مرجع إلى System.Web.فيما يلي منفذ إلى C# لأولئك الذين لا يستخدمون VB.NET:
/// <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")
تأكد من أن لديك system.web كأحد المراجع في مشروعك.لا أعتقد أنه تم تضمينه كمرجع افتراضيًا في تطبيقات وحدة التحكم.
حاول استخدام أسلوب UrlEncode في فئة HttpUtility.
لقد واجهت هذه المشكلة بنفسي، وبدلاً من إضافة تجميع 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
يستخدم WebUtility.UrlEncode(string)
من System.Net
مساحة الاسم
يقدم Kibbee الجواب الحقيقي.نعم، HttpUtility.UrlEncode هي الطريقة الصحيحة للاستخدام، ولكنها لن تكون متاحة افتراضيًا لتطبيق وحدة التحكم.أنت يجب إضافة مرجع إلى System.Web.للقيام بذلك،
- في مستكشف الحلول الخاص بك، انقر بزر الماوس الأيمن على المراجع
- اختر "إضافة مرجع"
- في مربع الحوار "إضافة مرجع"، استخدم علامة التبويب .NET
- قم بالتمرير لأسفل إلى System.Web، وحدد ذلك، ثم اضغط على "موافق".
الآن يمكنك استخدام طريقة UrlEncode.ستظل ترغب في الإضافة،
باستخدام System.Web
في الجزء العلوي من تطبيق وحدة التحكم الخاصة بك أو استخدم مساحة الاسم الكاملة عند استدعاء الطريقة،
System.Web.HttpUtility.UrlEncode(someString)
HttpUtility.UrlEncode("url") في System.Web.
استخدم طريقة HttpUtility.UrlEncode الثابتة.
أفضل شيء هو إضافة مرجع إلى System.web..dll
واستخدام var encodedurl = system.web.httputily.urlencode ("url_text") ؛
يمكنك العثور على الملف في System.web.dll
لا ينبغي استخدام Uri.EscapeUriString للهروب من سلسلة يتم تمريرها في عنوان URL لأنه لا يقوم بتشفير كافة الأحرف كما قد تتوقع."+" هو مثال جيد لا يمكن الهروب منه.يتم تحويل هذا بعد ذلك إلى مسافة في عنوان URL لأن هذا هو ما يعنيه عنوان URI بسيط.من الواضح أن هذا يسبب مشكلات كبيرة في اللحظة التي تحاول فيها تمرير شيء مثل سلسلة مشفرة بقاعدة 64 في عنوان URL وتظهر المسافات في جميع أنحاء السلسلة في الطرف المتلقي.
يمكنك استخدام HttpUtility.UrlEncode وإضافة المراجع المطلوبة إلى مشروعك (وإذا كنت تتواصل باستخدام تطبيق ويب، فلا أرى أي سبب يمنعك من القيام بذلك).
بدلاً من ذلك، استخدم Uri.EscapeDataString عبر Uri.EscapeUriString كما هو موضح جيدًا هنا: https://stackoverflow.com/a/34189188/7391