强制 ASP .NET Core 2.1 使用 HTTPS 和 return 400 错误
Enforcing ASP .NET Core 2.1 to use HTTPS and return 400 Error
我有一个较旧的 ASP .NET Core 2.1 应用程序,它一直在接受 HTTP 请求。
我现在需要应用程序停止使用 HTTP 并仅使用 HTTPS 和 return 40x 错误 any HTTP 请求 automatically/by 默认值。
我做了以下事情:
- 添加了app.UseHttpsRedirection();到配置方法;还添加了
- 添加了“https_port”:443,到 appsettings.json
- 我还尝试在应用程序本身(在 Azure 中)上启用“仅 HTTPS”。
但无论我使用 HTTP 还是 HTTPS 调用,它仍然接受和 returns 相同的响应(和 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();
...
这是请求,returns 200 OK,数据相同:
或者我错过了它应该如何工作?
更新:即使我删除了 HttpsRedirection 部分,并保留唯一的 app.UseExceptionHandler - 它仍然没有按预期工作(所有 HTTP 仍在通过并且 returns 与相同的数据HTTPS).
据我所知,如果你使用了UseHttpsRedirection,它会将所有的http请求重定向到HTTPS。这意味着您的网站将不包含任何发送到您的服务器的 http 请求。使用 http.
时不需要 return 400
你的服务器会让所有的http请求重定向到https。我建议你可以尝试使用浏览器F12开发工具来检查这个https重定向是否正常。
看来最好的方法是将v2.1 迁移到v3.1。然后还创建自己的包以使用 TLS 进行远程连接,并禁用 app.UseHttpsRedirection();
我有一个较旧的 ASP .NET Core 2.1 应用程序,它一直在接受 HTTP 请求。
我现在需要应用程序停止使用 HTTP 并仅使用 HTTPS 和 return 40x 错误 any HTTP 请求 automatically/by 默认值。
我做了以下事情:
- 添加了app.UseHttpsRedirection();到配置方法;还添加了
- 添加了“https_port”:443,到 appsettings.json
- 我还尝试在应用程序本身(在 Azure 中)上启用“仅 HTTPS”。
但无论我使用 HTTP 还是 HTTPS 调用,它仍然接受和 returns 相同的响应(和 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();
...
这是请求,returns 200 OK,数据相同:
或者我错过了它应该如何工作?
更新:即使我删除了 HttpsRedirection 部分,并保留唯一的 app.UseExceptionHandler - 它仍然没有按预期工作(所有 HTTP 仍在通过并且 returns 与相同的数据HTTPS).
据我所知,如果你使用了UseHttpsRedirection,它会将所有的http请求重定向到HTTPS。这意味着您的网站将不包含任何发送到您的服务器的 http 请求。使用 http.
时不需要 return 400你的服务器会让所有的http请求重定向到https。我建议你可以尝试使用浏览器F12开发工具来检查这个https重定向是否正常。
看来最好的方法是将v2.1 迁移到v3.1。然后还创建自己的包以使用 TLS 进行远程连接,并禁用 app.UseHttpsRedirection();