我有一个启用HTTPS重定向的ASP.NET Core应用程序。问题是HTTPS重定向不适用于静态文件,因此当我使用http进入站点时,前端与后端的端口不同,这会导致CORS阻止对后端的所有请求。我尝试允许CORS处理所有请求(当然是用于测试),但是无论我做什么,这些请求都失败了。仅使用https访问前端有效。如何使用ASP.NET Core强制对静态文件进行https重定向?
答案 0 :(得分:2)
根据我的经验,您必须将此代码添加到startup.cs文件中
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpsRedirection(options =>
{
options.HttpsPort = 443;
});
您必须爱上Microsoft documentation。不完整示例下面的6个段落告诉您有关此要求的信息:
如果未设置端口:
- 请求未重定向。
您可以使用以下技术来设置端口:
可以通过设置端口来配置端口:
答案 1 :(得分:1)
这对我有用。
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = (context) =>
{
var request = context.Context.Request;
var response = context.Context.Response;
UrlRewriteUtils.RedirectIfHttp(request, response);
}
});
这是Utility方法。
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);
}
}
}