2013-03-05 23 views
9

Tôi đang sử dụng Google Translate API và đang cố gắng thu thập dữ liệu được trả về khi tôi nhận được error. (FYI: Tôi biết Khóa API là sai, tôi chỉ đang thử nghiệm điều này).Sử dụng WebClient và C#, làm cách nào để tôi nhận dữ liệu trả về ngay cả khi phản hồi là (400) Yêu cầu không hợp lệ?

Vấn đề là trình duyệt, như bạn có thể thấy bằng cách nhấp vào liên kết, hiển thị thông tin lỗi, nhưng C# ném WebException và dường như tôi không nhận được dữ liệu phản hồi.

Đây là mã của tôi:

string url = "https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&source=en&target=de&q=Hello%20world"; 
WebClient clnt = new WebClient(); 

//Get string response 
try 
{ 
    strResponse = clnt.DownloadString(url); 
    System.Diagnostics.Debug.Print(strResponse); 
} 
catch (Exception ex) 
{ 
    System.Windows.Forms.MessageBox.Show(ex.Message); 
    return null; 
} 

Làm thế nào để nhận được lỗi JSON trở lại ngay cả khi câu trả lời là một (400) Bad Request (hoặc bất kỳ resonse lỗi khác cho rằng vấn đề)? Tôi có cần sử dụng các lớp khác nhau không phải là WebClient không?

Trả lời

25

này có thể giúp bạn

catch (WebException exception) 
{ 
    string responseText; 

    using(var reader = new StreamReader(exception.Response.GetResponseStream())) 
    { 
    responseText = reader.ReadToEnd(); 
    } 
} 

Điều đó sẽ giúp bạn có được văn bản json, mà bạn có thể chuyển đổi từ JSON sử dụng phương pháp nào bạn thích.

Lấy từ: Get WebClient errors as string

+0

Cảm ơn! Làm việc hoàn hảo. –

+0

Có thể nhận đối tượng này nếu nó không ném ngoại lệ không? – DFTR

1

Tôi sẽ bắt ngoại lệ cụ thể mà bạn đang nhận - nó sẽ có dữ liệu thích hợp liên quan đến lỗi.

Theo MSDN, WebException.Response sẽ chứa phản hồi nhận được từ máy chủ.

Khi bạn có thể truy xuất dữ liệu JSON từ đối tượng phản hồi này, thì bạn sẽ cần tự mình deserialize nó nếu bạn muốn.

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