2013-03-30 77 views
24

Sau khi yêu cầu POST/GET tôi lấy lại URL mà tôi cần phân tích, tất nhiên tôi có thể đi và sử dụng spit() để nhận thông tin bắt buộc, nhưng chắc chắn sẽ là cách thanh lịch hơn. Bất kỳ ý tưởng?Cách phân tích cú pháp theo cách thanh lịch URL

http://api.vkontakte.ru/blank.html#access_token=8860213c0a392ba0971fb35bdfb0z605d459a9dcf9d2208ab60e714c3367681c6d091aa12a3fdd31a4872&expires_in=86400&user_id=34558123

Tôi phân tích cho: access tokenexpires_in

+1

Uri lớp học? http://msdn.microsoft.com/en-us/library/system.uri.aspx –

+1

bản sao có thể có của [Nhận thông số url từ chuỗi trong .NET] (http://stackoverflow.com/questions/659887/get -url-parameters-from-a-string-in-net) –

Trả lời

32

Sử dụng lớp URI bạn có thể làm điều này:

var url = new Uri('your url'); 
+1

hm .. Tôi đã xem trong lớp URI nhưng không thể tìm ra cách để phân tích cú pháp các tham số bằng cách sử dụng nó. bất kỳ ví dụ nào? –

+0

uri.Query.Split ('&') sẽ cung cấp cho bạn tất cả thông số chuỗi truy vấn, khi bạn có thể thực hiện chia nhỏ theo "=" để tách giá trị khỏi tên. – ryudice

+7

sử dụng tốt hơn HttpUtility.ParseQueryString http://stackoverflow.com/a/659929/351383 –

26

Sử dụng Uri + ParseQueryString chức năng:

Uri myUri = new Uri("http://api.vkontakte.ru/blank.html#access_token=8860213c0a392ba0971fb35bdfb0z605d459a9dcf9d2208ab60e714c3367681c6d091aa12a3fdd31a4872&expires_in=86400&user_id=34558123"); 

String access_token = HttpUtility.ParseQueryString(myUri.Query).Get("access_token"); 
String expires_in = HttpUtility.ParseQueryString(myUri.Query).Get("expires_in"); 

Điều này cũng sẽ làm các trick

String access_token = HttpUtility.ParseQueryString(myUri.Query).Get(0); 

Nguồn: https://msdn.microsoft.com/en-us/library/ms150046.aspx

Mẹo: Bạn có thể cần

using System.Web; 

Và thêm một tham chiếu đến System.Web

11

Có một số cách bạn có thể làm điều này. Một là bạn chỉ có thể sử dụng phương thức Uri.Query để nhận chuỗi truy vấn và sau đó phân tích cú pháp theo số & s. Một cách khác là bạn có thể sử dụng phương thức Uri.Query và sau đó sử dụng HttpUtility.ParseQueryString để phân tích cú pháp chuỗi truy vấn dưới dạng NameValueCollection, có thể là tuyến đường ưa thích của bạn.

Xem ví dụ dưới đây:

using System.Web; // For HttpUtility 

// The original URL: 
Uri unparsedUrl = new Uri("http://api.vkontakte.ru/blank.html#access_token=8860213c0a392ba0971fb35bdfb0z605d459a9dcf9d2208ab60e714c3367681c6d091aa12a3fdd31a4872&expires_in=86400&user_id=34558123"); 
// Grabs the query string from the URL: 
string query = unparsedUrl.Query; 
// Parses the query string as a NameValueCollection: 
var queryParams = HttpUtility.ParseQueryString(query); 

Bây giờ bạn có thể thực hiện các hoạt động tương tự như cách bạn sẽ đối phó với một đối tượng Dictionary. Giống như vậy:

string accessToken = queryParams["access_token"]; 
string expiresIn = queryParams["expires_in"]; 

Chức năng này giống với chức năng của @Jeroen Bouman, nhưng chia tách các chức năng khác nhau để bạn có thể hiểu từng phần riêng lẻ.

Tài liệu tham khảo:

Uri.Query

HttpUtility.ParseQueryString

NameValueCollection

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