2012-10-29 19 views
12

Tworzę interfejs API, w którym można przesłać plik w porowaty sposób.Dlaczego nagłówek zakresu treści jest pozbawiony żądań w interfejsie API sieci ASP.NET?

Przechodząc przez ten numer Stackoverflow question and answer, nagłówek zakresu treści wydaje się najbardziej odpowiedni do tego.

Jednak w akcji kontrolera nagłówek został usunięty, więc nie mogę uzyskać do niego dostępu. Kiedy używam nagłówka "zakres", jest on dostępny w kolekcji nagłówków żądań.

Czy ktoś wie, dlaczego zakres treści został usunięty z Żądania?

Odpowiedz

8

Nie jest pozbawiony. Szukaj go w Request.Content.Headers. Wygląda na to, że ujednolicili nagłówki ze specyfikacjami HTTP/1.1 - przenoszenie nagłówków encji do Request.Content.Headers.
Próbowałem go w przykładowym żądaniu i znalazłem tam.

Znalazłem tę zmianę po przeczytaniu odpowiednich sekcji RFC 2616. Przechodzę do tego ostatnio, ponieważ główny autor, Fielding, jest również wynalazcą stylu architektonicznego REST i staram się podążać za tym stylem za pomocą interfejsu ASP.NET Web API.

Zdałem sobie sprawę, że istniało rozróżnienie między "żądaniem", "odpowiedzią", "ogólnym" (używanym zarówno na żądanie, jak i na odpowiedzi, ale nie na powiązaniu z jednostką) i nagłówkami "encji".

Wygląda jakby zespół ASP.NET zmieniony model klasy, aby lepiej odzwierciedlać RFC, tworząc trzy podklasy HttpHeaders:

  • HttpRequestHeaders dla "pól nagłówka żądania 5.3" i "4.5 General Fields Header"
  • HttpResponsHeaders dla "6.2 Response pól nagłówka" i "4.5 General pól nagłówka"
  • HttpContentHeaders dla "7.1 Entity pól nagłówka"

Są verbatim opisy trzech klas w MSDN (linki są moje):

Uwaga, chociaż ten opis klasy MSDN jest nieco błędny - w specyfikacji RFC nie ma definicji nagłówków treści, ale jasne jest, że oznaczały nagłówki encji.

+0

świetne znalezisko. Rzeczywiście było to sprytnie ukryte. – Toad

+0

Czy zgadzasz się, że zakres zawartości jest odpowiednim nagłówkiem do wysyłania porcji pliku podczas przesyłania? Wątpiłem między tym nagłówkiem a nagłówkiem zakresu. – Toad

+1

Nie mam z tym żadnego doświadczenia, ale czytając specyfikację - tak. Range jest nagłówkiem żądania - wydaje się, że jest przeznaczony do żądania zasięgu.Content-Range, będący nagłówkiem encji, ma znaczenie na żądaniu PUT (aby klient mógł zidentyfikować na serwerze porcję wysyłaną w celu zastąpienia części istniejącego zasobu) i na odpowiedź GET (aby serwer mógł zidentyfikować do klient, który jest zwracany). –

Powiązane problemy