使用HttpClient,发送没有架构的授权令牌

Jac*_*cob 4 c# asp.net-web-api dotnet-httpclient

注意:这个问题类似于这一个,但其建议的答案在这里并不适用.

我正在尝试访问此API,它正在寻找一个如下所示的标头:

Authorization: {token}
Run Code Online (Sandbox Code Playgroud)

请注意,没有任何身份验证方案.

我试过做:

myHttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("", authToken);
Run Code Online (Sandbox Code Playgroud)

这导致了一个ArgumentException,说我无法传递一个空字符串.

我也试过了两个:

myHttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(authToken);
Run Code Online (Sandbox Code Playgroud)

myHttpClient.DefaultRequestHeaders.Add("Authorization", authToken);
Run Code Online (Sandbox Code Playgroud)

这两个都导致FormatException.

似乎有些东西迫使我遵循我的授权标头的标准格式,但我尝试访问的服务不使用该标准格式.

小智 8

你可以尝试:

request.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", token));
Run Code Online (Sandbox Code Playgroud)

https://msdn.microsoft.com/en-us/library/hh875106(v=vs.118).aspx中所述


Jac*_*cob 7

正如经常发生的那样,在我提出问题后我就找到了答案。

HttpClinet 让我遵循的标准格式是 Http 协议本身,它需要身份验证方案,但是有一个解决方法。

代替:

myHttpClient.DefaultRequestHeaders.Add("Authorization", authToken);
Run Code Online (Sandbox Code Playgroud)

您可以使用:

myHttpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", authToken);
Run Code Online (Sandbox Code Playgroud)

它忽略 Http 标准,只允许您根据需要添加标头。