我在 ASP.Net 中创建了一个Web API项目,但在使身份验证工作时遇到了一些问题。
API 期望在每个请求的授权标头中提交令牌。 检查标头是否已设置的代码检查是否
HttpRequestMessage.Headers.Authorization
属性为空。 在我测试这个的前几次,我发现这个属性总是空的,但奇怪的是,如果你检查了 HttpRequestMessage.Headers 枚举,授权头设置正确(如果你做了 HttpRequestMessage.Headers.ToString(),它也会出现在那里)。
更奇怪的是,我发现如果我删除令牌中发送的一些属性,我可以让它按预期工作。 因此,如果标头值的字符长度太长,就好像没有设置 Authorization 属性。 不幸的是,即使手动从令牌中删除一些文本,它也会在摘要检查中继续失败,因为它应该!
我找不到任何提到这一点的文档,所以我想知道是否有其他人遇到过它? 我不认为标头对于IIS来说太长,因为标头值出现在HttpRequestMessage.Headers.ToString()中,因此它正在接收,但由于某种原因,它没有分配给授权属性。
不幸的是,我无法重写检查此属性的代码(这似乎是简单的解决方案),因为它是 Thinktecture 库的一部分(即不是我们自己编写的)。
如果要在 GET 上传递参数,则限制为 2100 个字符。RFC 规范在实现之间会有所不同。大多数浏览器将您限制为 2083 个字符。你绝对可以逃脱1000个字符。
Microsoft
几乎其他人
如果要在 POST 上传递参数,则长度应几乎不受限制。