5

Tôi đang phát triển ứng dụng C# \ XAML metro-ui. Tôi muốn gọi một số dịch vụ và sẽ sử dụng HttpWebRequest cho việc này. Việc thực hiện trước đây của HttpWebRequest chứa các thuộc tính ContentLengthUserAgent. Nhưng việc thực hiện cho WinRT không có nó. Tôi đã cố gắng sử dụng cách tiếp cận được mô tả trong số post này. Nó hoạt động cho UserAgent nhưng không hoạt động cho ContentLength. Tôi đã cố gắng để thiết lập HeadersLàm cách nào để thêm tiêu đề vào HttpWebRequest trong ứng dụng Windows8?

request.Headers["Content-length"] = Length; 
request.Headers["User-agent"] = UserAgent; 

Nhưng nhận được ngoại lệ "tiêu đề 'Content-length' phải được sửa đổi bằng cách sử dụng tài sản hoặc phương pháp thích hợp."

Có thể đặt Headers trong HttpWebRequest được thực hiện trong WinRT không?

+0

Nếu bạn xóa cài đặt độ dài nội dung, nó có hoạt động không? Có thể HttpWepRequest sẽ không cho phép bạn thiết lập độ dài nội dung vì nó tính toán nó dựa trên nội dung bạn đang gửi. –

+0

@LarryOsterman Nope. Hơn nữa tôi cần thiết lập thuộc tính 'Content-type'. Vì vậy, tôi cũng nên bình luận. Đối với cách tiếp cận được mô tả qua liên kết: Tôi nhận được '400 Yêu cầu không hợp lệ 'khi tôi nhận xét các thuộc tính này. Khi tôi nhận xét những điều này cho 'HttpWebRequest' tôi nhận được webexception' Kết nối cơ bản đã bị đóng: Kết nối đã được đóng bất ngờ.' – RredCat

+0

Hmmm. Tôi có thể thấy chiều dài nội dung thiết lập chặn HttpWebRequest (vì nó có thể tính toán độ dài nội dung). Yêu cầu xấu ngụ ý rằng có điều gì đó sai trái với tin nhắn được gửi đi, Fiddler cho thấy bạn gửi gì? –

Trả lời

12

HttpWebRequest có trạng thái bán không được chấp nhận theo WinRT. Một số giá trị tiêu đề mà trước đây có thể được sửa đổi trên các nền tảng .NET cũ hơn không thể sửa đổi được nữa.

Có vẻ như HttpClient là thay thế mới và được cải tiến cho HttpWebRequest với API đơn giản và hỗ trợ đầy đủ async.

Vì bạn muốn chỉ định Độ dài nội dung, tôi cho rằng bạn đang cố POST hoặc PUT cái gì đó đến máy chủ. Trong trường hợp đó, bạn sẽ muốn sử dụng PostAsync() hoặc PutAsync() khi thích hợp.

Bạn có thể không cần phải chỉ định tiêu đề Độ dài nội dung, vì nó sẽ tự động được bao gồm bởi các phương pháp đó dựa trên độ dài thực tế của Cơ thể, nhưng bạn có thể thử theo cách này.

+0

Vâng .. Bạn nói đúng .. Cảm ơn câu trả lời của bạn. Tôi đang chơi với một cái gì đó như .. Nhưng như tôi có thể thấy 'Body' là' HttpContent' loại, phải không? Và bạn đặt các thông số của bạn, phải không? Bạn có thể giải thích làm thế nào bạn đặt params trong ví dụ của 'HttpContent'? – RredCat

+0

Tôi đã tìm thấy nó. Tôi vừa mới mã hóa chuỗi tham số thành 'ASCII'. Nhưng nó không phải là giải pháp hoàn chỉnh. Tôi đã đề cập trong bình luận với @Larry Osterman rằng tôi đã có vấn đề với thiết lập 'ContentType'. Tôi tìm cách để làm điều đó - 'content.Headers.ContentType = new MediaTypeHeaderValue ("ứng dụng/x-www-form-urlencoded");' Dù sao đi nữa, tôi đã đánh dấu bạn là câu trả lời vì bạn khá gần câu trả lời) – RredCat