Прочетете персонализирани HttpHeaders с помощта на C#

Качвам файл на сървъра. Зададох FileName като персонализирана заглавка в моя HttpRequestMessage. Не мога да прочета тази заглавка от страната на сървъра.

using (FileStream fs = new FileStream(file, FileMode.Open))
{
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://localhost:54616/");

    HttpContent fileContent = new StreamContent(fs);
    HttpRequestMessage httpMsg = new HttpRequestMessage(HttpMethod.Post, "Api/FileHandler");
    httpMsg.Content = fileContent;
    httpMsg.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

    httpMsg.Content.Headers.Add("FileName", Path.GetFileName(file));

    var httpTask = client.SendAsync(httpMsg).Result;
}

От страната на сървъра:

var input = Request.Content.ReadAsStreamAsync().Result;
var allHeaders = Request.Content.Headers.GetValues("FileName").ToList();

Той хвърля изключение InvalidOperation.


person Abhijeet    schedule 23.07.2014    source източник
comment
@wizkid Не е дубликат, имам подобен код, както е предложен в отговора там, но при стартиране получавам InvalidOperation Exception   -  person Abhijeet    schedule 23.07.2014
comment
Използвайте Request.Headers   -  person Dai    schedule 23.07.2014


Отговори (1)


Трябва да осъзнаете, че HttpContentHeaders обвива заглавките, които са заглавки на Съдържание. Не можете да очаквате да добавите своя персонализирана („Име на файл“) заглавка към него и да го прочетете по-късно.

Вместо това използвайте обикновената колекция Headers:

// write
httpMsg.Headers.Add("FileName", Path.GetFileName(file));

// read
var fileHeaders = Request.Headers.GetValues("FileName").ToList();

Или, ако настоявате за HttpContentHeaders, използвайте неговото свойство ContentLocation, което връща Uri:

// write
httpMsg.Content.Headers.ContentLocation = new Uri(file);

// read
Uri file = Request.Content.Headers.ContentLocation;

Освен това, преди да прочетете стойността на заглавката си, винаги се препоръчва да проверите дали тази заглавка изобщо съществува (така че ще избегнете изключението):

if (Request.Headers.Contains("FileName"))
    fileHeaders = Request.Headers.GetValues("FileName").ToList();
person haim770    schedule 23.07.2014