asp.net-core - 强制 ASP .NET Core 2.1 使用 HTTPS 并返回 400 错误
问题描述
我有一个较旧的 ASP .NET Core 2.1 应用程序,它一直在接受 HTTP 请求。
我现在需要该应用程序停止使用 HTTP 并仅使用 HTTPS 并自动/默认为任何HTTP 请求返回 40x 错误。
我做了以下事情:
- 添加了 app.UseHttpsRedirection(); 配置方法;还添加了
- 在 appsettings.json 中添加了“https_port”:443
- 我还尝试在应用程序本身(在 Azure 中)启用“仅 HTTPS”。
但无论我使用 HTTP 还是 HTTPS 调用,它仍然接受并返回相同的响应(和 200)。
关于我在这里要实施什么的任何建议?
这是我的 Startup.cs 的一部分:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Use(async (context, next) =>
{
if (context.Request.Method == "OPTIONS")
{
context.Response.StatusCode = 405;
return;
}
await next.Invoke();
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseUsageLogging();
app.UseSerilogRequestLogging();
app.UseCoreExceptionHandling();
app.UseAuthentication();
app.UseCors("CorsPolicy");
app.UseAspNetCoreAuth();
...
以下是请求,它们都返回 200 OK 和相同的数据:
还是我错过了它应该如何工作?
更新:即使我删除了 HttpsRedirection 部分,并留下唯一的 app.UseExceptionHandler - 它仍然无法按预期工作(所有 HTTP 仍在通过并返回与 HTTPS 相同的数据)。
解决方案
据我所知,如果你使用了 UseHttpsRedirection,它会将所有的 http 请求重定向到 HTTPS。这意味着您的网站不会包含任何发送到您的服务器的 http 请求。使用 http 时无需返回 400。
您的服务器将让所有 http 请求重定向到 https。我建议您可以尝试使用浏览器 F12 开发工具来检查此 httpsredirection 是否正常工作。
推荐阅读
- javascript - JavaScript 实现是否为块级作用域创建了新的堆栈框架?
- log4net - Log4Net 如何登录
- node.js - multer-gridfs-storage (node:4041) DeprecationWarning: collection.insert 已弃用。改用 insertOne、insertMany 或 bulkWrite
- python - Numpy 在读取 CSV 时将科学记数法转换为 nan
- bazel - Bazel 文件名中带有“:”的解决方法?
- powershell - Powershell 杀死除当前打开的所有 Powershell 窗口
- c++ - 如何从rabbitmq的库中的消息中读取reply_to - amqpcpp?
- microsoft-graph-api - Microsoft Graph 更新订阅总是导致 403 Forbidden 错误
- visual-studio - 在 Visual Studio 2017 安装程序中修改用户和系统变量
- angular - 角度自定义管道返回表数据错误