今天被 HttpClient 的 Headers.Authorization 给恶心到了 (C#)
2022/7/4 1:21:18
本文主要是介绍今天被 HttpClient 的 Headers.Authorization 给恶心到了 (C#),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
今天真的被 HttpClient 的 Headers.Authorization 给恶心到了,真的恶心了。
得吐个槽。
using (HttpClient cli = HttpClientFactory.Create()) { cli.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue($"API-PROXY-AUTH;version=1.0,timestamp={stmp},appid={appid},sign={sign}"); cli.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(" ",$"API-PROXY-AUTH;version=1.0,timestamp={stmp},appid={appid},sign={sign}"); cli.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("",$"API-PROXY-AUTH;version=1.0,timestamp={stmp},appid={appid},sign={sign}"); cli.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(null,$"API-PROXY-AUTH;version=1.0,timestamp={stmp},appid={appid},sign={sign}"); var hd = cli.PostAsync($"http://{addr}/api-proxy/v1/callback/call", new StringContent("mydata")).Result; }
如上,各种尝试都是不行。
后来看 AuthenticationHeaderValue 的代码,才发现 AuthenticationHeaderValue 的构造函数必须传入非空的参数(空格都不行)·scheme·,而且还要检查字符,一堆字符不能被包含
[__DynamicallyInvokable] public AuthenticationHeaderValue(string scheme) : this(scheme, null) { } [__DynamicallyInvokable] public AuthenticationHeaderValue(string scheme, string parameter) { HeaderUtilities.CheckValidToken(scheme, "scheme"); this.scheme = scheme; this.parameter = parameter; }
namespace System.Net.Http.Headers { internal static class HeaderUtilities { internal static void CheckValidToken(string value, string parameterName) { if (string.IsNullOrEmpty(value)) { throw new ArgumentException(SR.net_http_argument_empty_string, parameterName); } if (HttpRuleParser.GetTokenLength(value, 0) != value.Length) { throw new FormatException(string.Format(CultureInfo.InvariantCulture, SR.net_http_headers_invalid_value, value)); } }
namespace System.Net.Http { internal static class HttpRuleParser { static HttpRuleParser() { tokenChars = new bool[128]; for (int i = 33; i < 127; i++) { tokenChars[i] = true; } //一堆字符检测,都属于非法字符,比如空格、逗号、等于号、分号、括号等等 tokenChars[40] = false; tokenChars[41] = false; tokenChars[60] = false; tokenChars[62] = false; tokenChars[64] = false; tokenChars[44] = false; tokenChars[59] = false; tokenChars[58] = false; tokenChars[92] = false; tokenChars[34] = false; tokenChars[47] = false; tokenChars[91] = false; tokenChars[93] = false; tokenChars[63] = false; tokenChars[61] = false; tokenChars[123] = false; tokenChars[125] = false; } internal static bool IsTokenChar(char character) { if (character > '\u007f') { return false; } return tokenChars[character]; } internal static int GetTokenLength(string input, int startIndex) { if (startIndex >= input.Length) { return 0; } for (int i = startIndex; i < input.Length; i++) { if (!IsTokenChar(input[i])) { return i - startIndex; } } return input.Length - startIndex; }
参考了 msdn-doc 也没看到说有限制的,却在使用的时候给限制了。。。。。。。
后来,换用了 HttpWebRequest , 想写啥就写啥。
确实有些不理解。
这篇关于今天被 HttpClient 的 Headers.Authorization 给恶心到了 (C#)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统