Description
HttpMessageContent
serializes HTTP requests/responses inside a mulitpart/mixed
body.
For requests, it sends the header Content-Type: application/http; msgtype=request
.
For responses, it expects the header Content-Type: application/http; msgtype=response
.
This is where msgtype=request
is added in source:
This is where msgtype=response
is validated in source:
AspNetWebStack/src/System.Net.Http.Formatting/HttpMessageContent.cs
Lines 142 to 171 in 1231b77
HttpMessageContent
should be configurable to not sent a msgtype
parameter, and accept responses without a msgtype
(given Content-Type: application/http
).
As a common real-world example, the OData specification uses Content-Type: application/http
without any further msgtype
in both its batched requests and responses, see:
https://www.odata.org/documentation/odata-version-2-0/batch-processing/
Inside Microsoft, Dataverse exposes OData services and its batching endpoint is unusable with HttpMessageContent
because:
- Dataverse throws when a batch has
msgtype=request
in itsContent-Type
; ReadAsHttpResponseMessageAsync()
throws when parsing Dataverse response because it does not havemsgtype=response
.