根据this主题我正在使用这段代码
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
HttpRequestMessageProperty httpRequestMessage;
object httpRequestMessageObject;
if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
{
httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;
if (string.IsNullOrEmpty(httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER]))
{
httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER] = this.m_userAgent;
}
}
else
{
httpRequestMessage = new HttpRequestMessageProperty();
requestMessageProperty.Headers.Add("Authorization", token);
request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
}
但不幸的是,自从我将代码从 .net framwork 4.7 移动到 .net core 2.1 项目后,我收到以下错误代码:
无法复制带有值的 HTTP 标头“授权” 'qqqqqqqqq=' 到 'System.Net.Http.Headers.HttpRequestHeaders'。 值的格式 'qqqqqqqqq=' 无效。
在旧项目中一切正常 是否可以跳过授权标头验证? 谢谢你
.net core 验证授权标头格式。
根据https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization
授权标头的格式应为:
Authorization: <type> <credentials>
requestMessageProperty.Headers.Add("Authorization", $"my-custom-auth-type {token}");
您可以使用
TryAddWithoutValidation
代替普通的 Add
using var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation()
或
using var client = new HttpClient();
var updateRequest = new HttpRequestMessage(new HttpMethod("PUT"), apiUrl)
updateRequest.Headers.TryAddWithoutValidation("If-Match", "something);