ASP.NET Core将http重定向到https

时间:2017-04-10 09:49:17

标签: asp.net asp.net-mvc ssl redirect asp.net-core

我在web.config中创建了一个重定向规则,将我的网站从http重定向到https。我遇到的问题是网站上的每个链接现在都是https。我有很多链接到其他网站没有SSL,因此我得到证书错误。这就是我所做的:

  <rewrite>
  <rules>
    <rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

如何仅为我的域重定向https而不是我网站上的每个链接?

7 个答案:

答案 0 :(得分:10)

实际上(ASP.NET Core 1.1)有一个名为Rewrite的middleware,其中包含您要执行的操作的规则。

您可以在Startup.cs上使用它,如下所示:

var options = new RewriteOptions()
    .AddRedirectToHttpsPermanent();

app.UseRewriter(options);

答案 1 :(得分:7)

在asp.net Core 2中,您可以使用独立于Web Server的URL Rewrite Startup.Configure中的app.UseRewriter,如下所示:

        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");

            // todo: replace with app.UseHsts(); once the feature will be stable
            app.UseRewriter(new RewriteOptions().AddRedirectToHttps(StatusCodes.Status301MovedPermanently, 443));
        }

答案 2 :(得分:3)

asp.net核心&lt; 2只需将此代码放入startup.cs

即可
        // IHostingEnvironment (stored in _env) is injected into the Startup class.
        if (!_hostingEnvironment.IsDevelopment())
        {
            services.Configure<MvcOptions>(options =>
            {
                options.Filters.Add(new RequireHttpsAttribute());
            });
        }

答案 3 :(得分:1)

您也可以为域添加其他条件

<add input="{HTTP_HOST}" negate="true" pattern="localhost" />

用您的域名替换“localhost”。

<rewrite>
  <rules>
    <rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
        <add input="{HTTP_HOST}" negate="true" pattern="yourdaomainname" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

欲了解更多信息,

https://www.softfluent.com/blog/dev/2016/12/27/Page-redirection-and-URL-Rewriting-with-ASP-NET-Core

希望这有帮助!

答案 4 :(得分:1)

在ASP.NET Core 2.1中只需使用以下内容:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();   // <-- Add this !!!!!
    }

    app.UseHttpsRedirection(); // <-- Add this !!!!!
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}

答案 5 :(得分:1)

您还需要在.net core 2.1中添加以下代码

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}

以及服务配置的以下部分

       services.AddHttpsRedirection(options =>
       {
        options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
        options.HttpsPort = 5001;
        });

答案 6 :(得分:1)

在ASP.NET Core 2.2中,您应该使用 Startup.cs 设置将http重定向到https

因此请将其添加到 ConfigureServices

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpsRedirection(options =>
    {
        options.HttpsPort = 443;
    });                           // ===== Add this =====
}

并将其添加到配置中:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();            // ===== Add this =====
    }

    app.UseHttpsRedirection();    // ===== Add this =====
}

然后享受它。