private void WriteMetadata(RavenJObject metadata)
{
if (metadata == null || metadata.Count == 0)
{
webRequest.ContentLength = 0;
return;
}
foreach (var prop in metadata)
{
if (prop.Value == null)
continue;
if (prop.Value.Type == JTokenType.Object ||
prop.Value.Type == JTokenType.Array)
continue;
var headerName = prop.Key;
if (headerName == "ETag")
headerName = "If-Match";
var value = prop.Value.Value<object>().ToString();
// Restricted headers require their own special treatment, otherwise an exception will
// be thrown.
// See http://msdn.microsoft.com/en-us/library/78h415ay.aspx
if (WebHeaderCollection.IsRestricted(headerName))
{
switch (headerName)
{
/*case "Date":
case "Referer":
case "Content-Length":
case "Expect":
case "Range":
case "Transfer-Encoding":
case "User-Agent":
case "Proxy-Connection":
case "Host": // Host property is not supported by 3.5
break;*/
case "Content-Type":
webRequest.ContentType = value;
break;
case "If-Modified-Since":
DateTime tmp;
DateTime.TryParse(value, out tmp);
webRequest.IfModifiedSince = tmp;
break;
case "Accept":
webRequest.Accept = value;
break;
case "Connection":
webRequest.Connection = value;
break;
}
}
else
{
webRequest.Headers[headerName] = value;
}
}
}