Fix HttpWebResponse.ContentType when response has invalid headers
authorDavid Shulman <david.shulman@microsoft.com>
Wed, 6 Jul 2016 21:30:04 +0000 (14:30 -0700)
committerDavid Shulman <david.shulman@microsoft.com>
Wed, 6 Jul 2016 21:45:54 +0000 (14:45 -0700)
commit493c7e4e1a5b3ea9c134f4b16b97fa1edbf7729f
tree6a5c646baf0b6c5492dbba0614813541f61ee9fb
parent33919a70d99bfe35951e774464a61f484333d3e5
Fix HttpWebResponse.ContentType when response has invalid headers

The HttpWebResponse.ContentType property is supposed to return a string value with the response's `Content-Type` header value. Even if the response header is considered non-conformant with RFC7231, the value is returned as-is as received on the wire.

In .NET Core, HttpWebRequest/HttpWebResponse is implemented as a wrapper around HttpClient. HttpClient has a strongly-typed model for headers. The current implementation of HttpWebResponse.ContentType was trying to use the strongly typed header from HttpClient. In cases where the header was malformed, it was returning empty string. This was a difference in behavior from .NET Framework.

The fix is to use TryGetValues() to retrieve the raw response header value for the 'Content-Type' header. This will result in compatible behavior with .NET Framework.

Fixes dotnet/corefx#9433.

Commit migrated from https://github.com/dotnet/corefx/commit/e0ce0fd8ab9f75583870609a5da26bab916d65e5
src/libraries/System.Net.Requests/src/System/Net/HttpWebResponse.cs
src/libraries/System.Net.Requests/tests/HttpWebResponseTest.cs