2010-06-18 37 views
7

Tôi cần URL đầy đủ Mã hóa địa chỉ email.URL Mã hóa tất cả số không phải là chữ số alpha trong C#

HttpUtility.UrlEncode dường như bỏ qua các ký tự nhất định như! và.

tôi cần phải vượt qua một địa chỉ email trong một url formated như thế này:

/Users/[email protected]/Comments 

Bởi vì mẫu WebMethod uri của tôi trông như thế này:

[WebGet(UriTemplate = "Users/{emailAddress}/Comments")] 

Các vi phạm thời gian WCF và sẽ không vượt qua được địa chỉ email vào phương thức webservice REST của tôi. Xóa khoảng thời gian vượt qua giá trị tốt. Tôi hy vọng có một phương pháp sẽ mã hóa tất cả các ký tự không phải chữ số alpha vì mọi thứ tiêu thụ dịch vụ này sẽ cần phải làm điều này.

EDIT

tôi đã xem xét sử dụng:

Convert.ToBase64String(Encoding.ASCII.GetBytes("[email protected]")) 

Do hầu hết các ngôn ngữ khác có cách dễ dàng để chuyển đổi một chuỗi Base64? Mối quan tâm chính của tôi là khách hàng sử dụng dịch vụ này sẽ cần phải mã hóa địa chỉ email bằng cách sử dụng Java, PHP, Ruby, v.v.

+0

được cải cách một chút. – Femaref

+0

Bạn gặp phải loại lỗi nào? –

+0

404 Không tìm thấy – Vyrotek

Trả lời

0

Tôi đã khám phá ra một giải pháp cho vấn đề này.

.Net 4.0 đã thực sự khắc phục sự cố với các ký tự đặc biệt trong Mẫu URI.

Chuỗi này chỉ cho tôi đúng hướng. http://social.msdn.microsoft.com/Forums/en/dataservices/thread/b5a14fc9-3975-4a7f-bdaa-b97b8f26212b

Tôi đã thêm tất cả các cài đặt cấu hình và nó hoạt động. Nhưng lưu ý, nó chỉ hoạt động với một thiết lập IIS thực với .Net 4.0. Tôi dường như không thể làm cho nó hoạt động với Visual Studio Dev IIS.

Cập nhật - Thực ra, tôi đã thử xóa các cài đặt cấu hình đó và nó vẫn hoạt động. Có thể là .Net 4.0 đã sửa lỗi này theo mặc định.

0

Sử dụng hex. Có một ConvertTo và một từ và một thử nghiệm mẫu ...

Bạn cũng có thể chỉ cần scape các ký tự không phù hợp với A đến Z bằng cách sử dụng một regex để URL của bạn vẫn trông khá.

Nó sẽ trả về một danh sách lớn của số vì vậy bạn nên được tốt

 public static string ConvertToHex(string asciiString) 
    { 
     var hex = ""; 
     foreach (var c in asciiString) 
     { 
      int tmp = c; 
      hex += String.Format("{0:x2}", Convert.ToUInt32(tmp.ToString())); 
     } 
     return hex; 
    } 

    public static string ConvertToString(string hex) 
    { 
     var stringValue = ""; 
     // While there's still something to convert in the hex string 
     while (hex.Length > 0) 
     { 
      stringValue += Convert.ToChar(Convert.ToUInt32(hex.Substring(0, 2), 16)).ToString(); 
      // Remove from the hex object the converted value 
      hex = hex.Substring(2, hex.Length - 2); 
     } 

     return stringValue; 
    } 

    static void Main(string[] args) 
    { 
     string hex = ConvertToHex("[email protected]m"); 
     Console.WriteLine(hex); 
     Console.ReadLine(); 
     string stringValue = 
     ConvertToString(hex); 
     Console.WriteLine(stringValue); 
     Console.ReadLine(); 

    } 
2

Dưới đây là một Regex tiềm năng bạn có thể sử dụng để thực hiện mã hóa.

Regex.Replace(s, @"[^\w]", m => "%" + ((int)m.Value[0]).ToString("X2"));

Tôi không chắc rằng có một phương pháp khuôn khổ hiện tại được xác định để mã hóa chặt chẽ tất cả các ký tự không tự chữ và số mà bạn có thể chỉ cho khách hàng của bạn.

0

Trừ khi tôi nhầm, URL Encoding chỉ đơn giản là ký hiệu phần trăm tiếp theo là số ASCII (trong hex), vì thế này nên làm việc ...

Dim Encoded as New StringBuilder() 

For Each Ch as Char In "[email protected]" 
    If Char.IsLetterOrDigit(Ch) 
     Encoded.Append(Ch) 
    Else 
     Encoded.Append("%") 
     Dim Byt as Byte = Encoding.ASCII.GetBytes(Ch)(0) 
     Encoded.AppendFormat("{0:x2}", Byt) 
    End If 
Next 

Kết quả mã trên trong something%2Bme%40example.com

+0

Xin lỗi vì tôi sử dụng VB.NET, nhưng bạn có thể dễ dàng thay đổi điều đó: http://codechanger.com/ –

+0

Làm thế nào bạn giải mã được? – Vyrotek

+0

@Vyrotek Bạn có thể dựa vào 'Uri.UnescapeDataString()' cho điều đó. –

Các vấn đề liên quan