.NET Core 2.1中AddHsts()与AddHttpsRedirection()未定义如何解决?
解决.NET Core 2.1中
UseHsts和AddHttpsRedirection找不到定义的问题 嘿,我来帮你搞定这个编译错误!你遇到的问题根源在于:.NET Core 2.1中,HSTS和HTTPS重定向的扩展方法并不包含在默认的框架元包里,需要手动添加对应的NuGet包并补充正确的命名空间引用。下面是具体的解决步骤:
1. 安装必要的NuGet包
你需要安装Microsoft.AspNetCore.HttpsPolicy包,这是包含AddHsts、AddHttpsRedirection、UseHsts、UseHttpsRedirection这些扩展方法的官方包。
安装方式二选一:
- 使用.NET CLI:在项目根目录执行命令:
dotnet add package Microsoft.AspNetCore.HttpsPolicy --version 2.1.1 - 使用Package Manager Console:在Visual Studio中打开控制台,执行:
Install-Package Microsoft.AspNetCore.HttpsPolicy -Version 2.1.1
注意:版本号请选择与你的.NET Core 2.1 runtime匹配的稳定版本,2.1.1是2.1系列的常用稳定版。
2. 添加正确的命名空间引用
在你的Startup.cs文件顶部,添加以下using指令:
using Microsoft.AspNetCore.HttpsPolicy;
你之前误以为这些方法在Microsoft.AspNetCore.Builder命名空间下,但实际上它们的扩展方法定义在Microsoft.AspNetCore.HttpsPolicy里,所以必须添加这个引用才能让编译器找到它们。
3. 验证代码配置的正确性
确保你的中间件和服务注册的位置符合最佳实践:
在ConfigureServices中的配置:
public void ConfigureServices(IServiceCollection services) { // 其他服务注册代码... services.AddHsts(options => { options.MaxAge = TimeSpan.FromDays(60); }); services.AddHttpsRedirection(options => { options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect; options.HttpsPort = 5001; }); // 其他服务注册代码... }
在Configure中的配置:
重要提示:HSTS不应该在开发环境启用,否则浏览器会缓存强制HTTPS的规则,影响本地调试!
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { // 仅在生产/非开发环境启用HSTS app.UseHsts(); } // HTTPS重定向要放在静态文件、路由等中间件之前 app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); // 其他中间件(比如授权、端点路由等)... }
额外说明
在.NET Core 3.0及以后的版本中,Microsoft.AspNetCore.HttpsPolicy已经被包含在默认的框架元包里,不需要手动安装;但2.1作为较早的LTS版本,需要单独引入这个包才能使用HSTS和HTTPS重定向功能。
内容的提问来源于stack exchange,提问作者Gehtnet
相关产品推荐
相关产品推荐

