.NET 4.7 Web API 读取Authorization header始终为null如何解决
你当前使用的请求头读取代码本身没有语法错误,出现jwtToken为null的核心原因是.NET Framework 4.7的默认安全策略导致的:未配置任何认证模块的Web API项目,ASP.NET/IIS请求管道会默认过滤掉Authorization请求头,不会将该头传递到Controller层的Request对象中。
常见解决方案
- 方案1:修改web.config配置,允许Authorization头传递
在项目根目录的web.config文件中添加如下配置,关闭默认的头过滤逻辑:
<configuration> <system.webServer> <!-- 移除默认认证模块的头拦截逻辑 --> <modules> <remove name="FormsAuthentication" /> <remove name="DefaultAuthentication" /> </modules> <!-- 显式允许Authorization请求头通过请求过滤规则 --> <security> <requestFiltering> <requestHeaders> <add name="Authorization" allowed="true" /> </requestHeaders> </requestFiltering> </security> </system.webServer> </configuration>
- 方案2:OWIN托管项目直接从OWIN上下文读取
如果你的项目使用OWIN中间件托管,也可以直接从OWIN上下文获取未被过滤的请求头:
var owinContext = Request.GetOwinContext(); string authHeader = owinContext.Request.Headers.Get("Authorization"); // 提取JWT内容 string jwt = authHeader?.Replace("Bearer ", string.Empty);
排查验证方法
如果配置完成后依然获取不到值,可以先输出所有请求头,确认Authorization头是否已经传递到应用层:
var headerLogs = Request.Headers.AllKeys.Select(key => $"{key}: {Request.Headers[key]}"); System.Diagnostics.Debug.WriteLine(string.Join("\n", headerLogs));
内容的提问来源于stack exchange,提问作者Neil Gilbert
相关产品推荐
相关产品推荐

