是否有添加HttpResponseHeader的内容头类型?

问题描述:

我在HttpResponseHeaders中看到的唯一方法是Add类型为字符串类型的字符串类型。 我只是想知道.NET是否提供了字符串中的HttpResponseHeader类型contants的列表?是否有添加HttpResponseHeader的内容头类型?

所以我可以做:

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

我可以看到有枚举的HttpResponseHeader列表,但它不提供conrespondingly字符串值...

即HttpResponseHeader.ContentRange,但正确的标题字符串应该是内容的范围

纠正我,如果我错了......

有三个强类型的HTTP标头班在System.Net.Http.Headers命名空间:

HttpContentHeaders(可通过0123访问任何System.Net.Http.HttpContent类型)属性对于内容类型的Content-Length内容编码等预先定义的属性...(这似乎是头你之后)。

您可以将它们像这样:

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

...和标题名称将被正确设置。

+0

哇,我怎么能错过这个......谢谢! – 2013-03-12 20:00:41

也许你可以尝试这样的事情。

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

在的WebAPI情况下,最后一行可能是:

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

反正@ ServiceGuy的答案是在的WebAPI/MVC上下文去

希望这将帮助

方式
+0

的HttpResponseHeaders.Add只接受(字符串,字符串)和(字符串,IEnumerable的)... Deosn't接受WebHeaderCollection本身... – 2013-03-11 17:33:34

+0

@KingChan:编辑我的答案为webapi/mvc上下文 – jbl 2013-03-12 09:05:03

您可以通过WebRequest和WebResponse上的属性获取并设置常见标题,如HttpWebRequest.ContentType

C#有一个内置的从Enum到字符串的转换。考虑到这些任务:

int val = 5; 
HttpResponseHeader header = HttpResponseHeader.Allow 

现在,val.ToString()将返回字符串"5",但header.ToString()将返回"Allow"。所以,我谦恭地建议使用

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

enum ContentRange to string也将是“ContentRange”,但正确的标题是“Content-Range”,这就是我所说的在问题中。 – 2013-03-11 17:36:03

+0

嗯。无论如何,标题的格式是否正确? (在[Fiddler](http://www.fiddler2.com/fiddler2/) – 2013-03-11 17:39:22

+0

之类的东西中查看请求)看起来好像有一些特殊的注意事项来处理Range和Content-Range的头文件[这里有一些阅读材料](http: //www.piotrwalat.net/file-download-service-with-resume-support-using-asp-net-web-api/) – 2013-03-11 18:12:15

使用ContentType属性:https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.contenttype.aspx

我能够做这样做在我的WCF服务实现如下:

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