Asp.net core 如何在ASP.NET Core 2.1中强制对静态文件进行https重定向?
我有一个启用了HTTPS重定向的ASP.NET核心应用程序。问题是HTTPS重定向在静态文件上不起作用,因此当我使用http进入站点时,前端与后端位于不同的端口,这会导致CORS阻止向后端发出的所有请求。我尝试允许CORS处理所有请求(当然是为了测试),但无论我做了什么,请求都失败了。仅使用https访问前端才有效。如何在使用ASP.NET Core的静态文件上强制https重定向?根据我的经验,您必须将此代码添加到startup.cs文件中Asp.net core 如何在ASP.NET Core 2.1中强制对静态文件进行https重定向?,asp.net-core,asp.net-core-2.1,Asp.net Core,Asp.net Core 2.1,我有一个启用了HTTPS重定向的ASP.NET核心应用程序。问题是HTTPS重定向在静态文件上不起作用,因此当我使用http进入站点时,前端与后端位于不同的端口,这会导致CORS阻止向后端发出的所有请求。我尝试允许CORS处理所有请求(当然是为了测试),但无论我做了什么,请求都失败了。仅使用https访问前端才有效。如何在使用ASP.NET Core的静态文件上强制https重定向?根据我的经验,您必须将此代码添加到startup.cs文件中 public void ConfigureSe
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpsRedirection(options =>
{
options.HttpsPort = 443;
});
你必须热爱微软。下面6段不完整的示例中,他们会告诉您此要求:
如果未设置端口:
- 请求不会被重定向
- ASPNETCORE\u HTTPS\u端口环境变量李>
- http_端口主机配置密钥(例如,通过hostsettings.json或命令
- 行参数)。
- httpsreditionoptions.HttpsPort。见上文
- 这对我很有效
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = (context) =>
{
var request = context.Context.Request;
var response = context.Context.Response;
UrlRewriteUtils.RedirectIfHttp(request, response);
}
});
这里是实用方法
public class UrlRewriteUtils
{
public static void RedirectIfHttp(HttpRequest request, HttpResponse response)
{
string reqProtocol;
if (request.Headers.ContainsKey("X-Forwarded-Proto"))
reqProtocol = request.Headers["X-Forwarded-Proto"][0];
else if (request.IsLocal())
reqProtocol = "https";
else
reqProtocol = request.IsHttps ? "https" : "http";
if (reqProtocol.ToLower() != "https")
{
var newUrl = new StringBuilder()
.Append("https://").Append(request.Host)
.Append(request.PathBase).Append(request.Path)
.Append(request.QueryString);
response.Redirect(newUrl.ToString(), true);
}
}
}
启动时,在
app.UseHttpsRedirection()
之前是app.UseStaticFiles()
吗?app.UseHttpsRedirection()
在启动时是在app.UseFileServer()
之后。@Alejandro它必须在之前,而不是之后。您可以在这里进一步阅读,它仍然没有将静态文件重定向到https。我没有使用dotnet新mvc
。我使用了dotnet new webapi
,因为该站点最初只是一个api,然后我使用vue cli
创建前端,并将其配置为在wwwroot中构建。如果我键入http://localhost:5000
那么我就不会被重定向到https://localhost:5001
。css重定向得很好。添加代码根本不起作用。我甚至试过使用URL重写器,但也没用。