2013-03-11 46 views
5

Phương pháp duy nhất tôi thấy trong HttpResponseHeaders là Add có kiểu chuỗi cho kiểu tiêu đề. Tôi tự hỏi .NET có cung cấp danh sách các đối tượng kiểu HttpResponseHeader trong chuỗi không?Có loại Tiêu đề nội dung để thêm HttpResponseHeader không?

Vì vậy, tôi có thể làm:

HttpResponseMessage response = Request.CreateResponse.........; 
response.Headers.Add(xxxxx.ContentRange, "something"); 

tôi có thể thấy có một danh sách các Enum trong HttpResponseHeader, nhưng nó không cung cấp giá trị chuỗi conrespondingly ...

tức HttpResponseHeader.ContentRange, nhưng chuỗi tiêu đề chính xác nên Content cấp

đúng tôi nếu tôi sai ...

Trả lời

5

Có ba lớp HTTP tiêu đề mạnh mẽ-gõ trong không gian tên System.Net.Http.Headers:

HttpContentHeaders (có thể truy cập được qua Headers thuộc tính của bất kỳ loại System.Net.Http.HttpContent nào) có thuộc tính được xác định trước cho Loại Nội dung, Nội dung dài, Mã hóa nội dung v.v ... (có vẻ như là tiêu đề bạn sau đó).

Bạn có thể cài đặt chúng như thế này:

var content = new StringContent("foo"); 
content.Headers.Expires = DateTime.Now.AddHours(4); 
content.Headers.ContentType.MediaType = "text/plain"; 

... và những cái tên tiêu đề sẽ được thiết lập một cách chính xác.

+0

O wow, làm thế nào ... tôi có thể bỏ lỡ điều này .... Cảm ơn! –

1

có lẽ bạn có thể thử một cái gì đó như thế này.

var whc = new System.Net.WebHeaderCollection(); 
whc.Add(System.Net.HttpResponseHeader.ContentRange, "myvalue"); 
Response.Headers.Add(whc); 

Trong một bối cảnh WebAPI, dòng cuối cùng có thể là:

HttpContext.Current.Response.Headers.Add(whc); 

dù sao, @ câu trả lời ServiceGuy là con đường để đi trong một bối cảnh WebAPI/MVC

Hy vọng điều này sẽ giúp

+0

Các HttpResponseHeaders.Add chỉ chấp nhận (string, string) và (string, IEnumerable ) ... Deosn't chấp nhận WebHeaderCollection chính nó ... –

+0

@KingChan: đã chỉnh sửa câu trả lời của tôi cho ngữ cảnh webapi/mvc – jbl

0

C# có chuyển đổi được tích hợp từ Enum thành chuỗi. Hãy xem xét những bài tập:

int val = 5; 
HttpResponseHeader header = HttpResponseHeader.Allow 

Bây giờ, val.ToString() sẽ trả về chuỗi "5", nhưng header.ToString() sẽ trở lại "Allow". Vì vậy, tôi đề nghị sử dụng một cách khiêm nhường

response.Headers.Add(HttpResponseHeader.ContentRange.ToString(), "something"); 
+1

enum ContentRange thành chuỗi sẽ là "ContentRange", nhưng Tiêu đề chính xác là "Content-Range", đó là những gì tôi đã nêu trong câu hỏi. –

+0

Hmm. Đầu trang có được định dạng chính xác anyways không? (nhìn vào yêu cầu trong một cái gì đó như [Fiddler] (http://www.fiddler2.com/fiddler2/) –

+0

Dường như có những cân nhắc đặc biệt cho các tiêu đề Phạm vi và Phạm vi Nội dung. [Đây là một số tài liệu đọc] (http: //www.piotrwalat.net/file-download-service-with-resume-support-using-asp-net-web-api/) –

0

Sử dụng thuộc tính ContentType: https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.contenttype.aspx.

tôi đã có thể làm được điều này trong việc thực hiện dịch vụ WCF của tôi bằng cách làm như sau:

// Get the outgoing response portion of the current context 
var response = WebOperationContext.Current.OutgoingResponse; 

// Add ContentType header that specifies we are using JSON 
response.ContentType = new MediaTypeHeaderValue("application/json").ToString(); 
Các vấn đề liên quan