2011-07-03 5 views
22

Làm cách nào để đặt tiêu đề trong lớp webClient? tôi đã cố gắng:WebClient đặt tiêu đề

client.Headers["Content-Type"] = "image/jpeg"; 

đó ném một WebException

Mã của tôi:

WebClient client = new WebClient(); 
client.Headers.Set("Content-Type", "image/png"); 
client.Headers.Set("Content-Length", length); 
client.Headers.Add("Slug", name); 
NameValueCollection nvc = new NameValueCollection(); 
nvc.Add("file", FileContents); 

Byte[] data = client.UploadValues(url, nvc); 
string res = Encoding.ASCII.GetString(data); 
Response.Write(res); 

Trả lời

29

Nếu tiêu đề đã tồn tại:

client.Headers.Set("Content-Type", "image/jpeg"); 

nếu nó một tiêu đề mới:

client.Headers.Add("Content-Type", "image/jpeg"); 

Ngoài ra, có một cơ hội mà bạn đang nhận được một lỗi bởi vì bạn đang cố gắng để thiết lập các tiêu đề quá muộn. Đăng ngoại lệ của bạn để chúng tôi có thể cho bạn biết.

Cập nhật

Hình như có một số hạn chế lạ vào "Content-Type" tiêu đề với lớp WebClient. Hãy xem xét cách sử dụng ứng dụng khách. Các phương thức tải xuống (DownloadData, DownloadFile, v.v ...)

Xem nếu sử dụng phương pháp "UploadFile" trên webclient hoạt động thay vì thực hiện thủ công. Nó trả về byte cơ thể hô hấp [].

Nếu bạn tiếp tục gặp sự cố với WebClient, hãy thử sử dụng HttpRequest/HttpWebRequest cũ đơn giản.

+0

Chi tiết ngoại lệ: System.Net.WebException: Tiêu đề Loại nội dung không thể thay đổi từ giá trị mặc định của nó cho yêu cầu này. Đã cập nhật –

+0

phản hồi ... – jdc0589

+0

bài đăng được cập nhật ... – jdc0589

0

Bạn đã thử cú pháp sau: client.Headers.Add("Content-Type", "image/jpeg");

stack trace của bạn là gì? Tại thời điểm nào bạn thiết lập này? Và bạn đang chạy phiên bản IIS/OS nào?

+0

Không hoạt động cho tôi. Tôi đang sử dụng IIS V5.1 –

+0

Dấu vết ngăn xếp của bạn là gì? Và tại thời điểm nào đang thiết lập tiêu đề? Có thể đăng thêm một số mã không? – Mrchief

11

Dường như bạn không thể đặt Loại nội dung bằng phương pháp WebClient.UploadValues. Bạn có thể thiết lập Content-type với phương pháp WebClient.UploadData

Sử dụng một cái gì đó như thế nào,

Client.Headers["Content-Type"] = "application/json"; 
Client.UploadData("http://www.imageshack.us/upload_api.php", "POST", Encoding.Default.GetBytes("{\"Data\": \"Test\"}")); 
0

Bạn không thể thay đổi Content-Type nếu bạn sử dụng phương pháp UploadValues, nó phải là application/x-www-form -urlencoded, xem mã nguồn webclient enter image description here