2013-03-11 11 views
5

Jedyną metodą, którą widzę w HttpResponseHeaders, jest Add, która pobiera typ łańcucha dla typu nagłówka. Po prostu zastanawiam się, czy .NET dostarczył listę ciągów typu HttpResponseHeader typu?Czy istnieje typ nagłówka treści do dodania HttpResponseHeader?

Więc mogę zrobić:

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

widzę tam znajduje się lista Enum w HttpResponseHeader, ale nie dostarcza wartość ciągu conrespondingly ...

tj HttpResponseHeader.ContentRange, ale prawidłowy ciąg nagłówek powinien być Content-klasy

Popraw mnie jeśli się mylę ...

Odpowiedz

5

Istnieją trzy silnie wpisany klasy nagłówka HTTP w przestrzeni nazw System.Net.Http.Headers:

HttpContentHeaders (dostępna przez Headers własnością żadnego z typów System.Net.Http.HttpContent) posiada zdefiniowane właściwości Content-Type, Content-Length, Content-Encoding itp ... (które wydają się być nagłówki wy były po).

Można ustawić je tak:

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

... i nazwy nagłówka zostanie ustawiony prawidłowo.

+0

O wow, jak ... mogę tego nie zauważyć ... Dzięki! –

1

może spróbujesz czegoś takiego.

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

W kontekście WebAPI, ostatnia linia może być:

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

tak, @ odpowiedź ServiceGuy jest do zrobienia w WebAPI/mvc kontekście

nadzieję, że pomoże

+0

HttpResponseHeaders.Add akceptować tylko (ciąg, ciąg) i (łańcuch, IEnumerable ) ... Deosn't zaakceptuj samą WebHeaderCollection ... –

+0

@KingChan: zredagowałem moją odpowiedź dla kontekstu webapi/mvc – jbl

0

C# ma wbudowaną konwersję z Enum na ciąg. Następujące zadania:

int val = 5; 
HttpResponseHeader header = HttpResponseHeader.Allow 

Teraz val.ToString() zwróci ciąg "5", ale header.ToString() powróci "Allow". Więc pokornie sugerują, używając

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

enum ContentRange do napisu będzie również "ContentRange", ale poprawny nagłówek to "Content-Range", to jest to, co napisałem w pytaniu. –

+0

Hmm. Czy mimo to nagłówek jest prawidłowo sformatowany? (patrząc na żądanie w czymś takim jak [Fiddler] (http://www.fiddler2.com/fiddler2/) –

+0

Wygląda na to, że pojawiły się specjalne rozważania dla nagłówków Range i Content-Range. [Oto niektóre materiały do ​​czytania] (http: //www.piotrwalat.net/file-download-service-with-resume-support-using-asp-net-web-api/) –

0

Użyj właściwości ContentType: https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.contenttype.aspx.

udało mi się zrobić to w moim realizacji usług WCF w następujący sposób:

// 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(); 
Powiązane problemy