2013-03-11 7 views
5

L'unico metodo che vedo in HttpResponseHeaders è Aggiungi che accetta il tipo di stringa per il tipo di intestazione. Mi chiedo se .NET abbia fornito una lista di contendenti di tipo HttpResponseHeader nella stringa?Esiste un tipo di intestazione contenuto per l'aggiunta di HttpResponseHeader?

così posso fare:

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

posso vedere c'è una lista di Enum in HttpResponseHeader, ma non fornisce valore stringa conrespondingly ...

cioè HttpResponseHeader.ContentRange, ma la stringa di intestazione corretta dovrebbe essere Content-Range

Correggetemi se sbaglio ...

risposta

5

Ci sono tre classi di intestazione HTTP fortemente tipizzato nello spazio dei nomi System.Net.Http.Headers:

HttpContentHeaders (accessibile tramite Headers proprietà di uno qualsiasi dei tipi System.Net.Http.HttpContent) ha proprietà pre-definiti per Content-Type, Content-Length, Content-Encoding ecc ... (che sembrano essere le intestazioni erano dopo).

È possibile impostare in questo modo:

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

... ed i nomi di intestazione sarà impostato correttamente.

+0

O wow, come ... posso aver perso questo .... Grazie! –

1

forse si può provare qualcosa di simile.

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

In un contesto WebAPI, l'ultima riga potrebbe essere:

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

in ogni caso, @ risposta di ServiceGuy è la strada da percorrere in un WebAPI/contesto MVC

Spero che questo vi aiuterà

+0

Il HttpResponseHeaders.Add accettano solo (string, string) e (string, IEnumerable ) ... deosn't accetta WebHeaderCollection stesso ... –

+0

@KingChan: modificato la mia risposta per un contesto webapi/mvc – jbl

0

C# ha una conversione integrata da Enum a stringa. Considerate queste assegnazioni:

int val = 5; 
HttpResponseHeader header = HttpResponseHeader.Allow 

Ora, val.ToString() restituirà la stringa "5", ma header.ToString() tornerà "Allow". Così ho umilmente suggerisco di usare

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

enum ContentRange to string sarà anche "ContentRange", ma l'intestazione corretta è "Content-Range", è quello che mi è stato dichiarato nella domanda. –

+0

Hmm. L'intestazione è formattata correttamente comunque? (guardando la richiesta in qualcosa come [Fiddler] (http://www.fiddler2.com/fiddler2/) –

+0

Sembra che vengano fornite considerazioni speciali per le intestazioni Range e Content-Range. [Ecco alcuni materiali di lettura] (http: //www.piotrwalat.net/file-download-service-with-resume-support-using-asp-net-web-api/) –

0

Utilizzare la proprietà ContentType: https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.contenttype.aspx.

sono stato in grado di fare questo nel mio implementazione del servizio WCF nel modo seguente:

// 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();