Asp.net core 如何在ASP.NET Core 2.1中强制对静态文件进行https重定向?

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

我有一个启用了HTTPS重定向的ASP.NET核心应用程序。问题是HTTPS重定向在静态文件上不起作用,因此当我使用http进入站点时,前端与后端位于不同的端口,这会导致CORS阻止向后端发出的所有请求。我尝试允许CORS处理所有请求(当然是为了测试),但无论我做了什么,请求都失败了。仅使用https访问前端才有效。如何在使用ASP.NET Core的静态文件上强制https重定向?

根据我的经验,您必须将此代码添加到startup.cs文件中

   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重写器,但也没用。