首页 > 解决方案 > 在整个 Angular 应用程序中强制 http 到 https 重定向

问题描述

我有一个使用Windows 身份验证的Angular (6)应用程序。.net Web API两者都部署到具有有效 SSL 证书的同一开发 Web 服务器。

我试图http to https在我的所有页面上强制重定向。我已经处理好了 -通过 Kudvenkat 的简单教程重定向到的Web API所有路径: http ://csharp-video-tutorials.blogspot.com/2016/09/aspnet-web-api-enable-https.html/apihttps

创建一个RequireHttpsAttribute.cs类:

using System;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;

namespace api
{
    public class RequireHttpsAttribute : AuthorizationFilterAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
            {
                actionContext.Response = actionContext.Request
                    .CreateResponse(HttpStatusCode.Found);
                actionContext.Response.Content = new StringContent
                    ("<p>Use https instead of http</p>", Encoding.UTF8, "text/html");

                UriBuilder uriBuilder = new UriBuilder(actionContext.Request.RequestUri);
                uriBuilder.Scheme = Uri.UriSchemeHttps;

                uriBuilder.Port = 443;

                actionContext.Response.Headers.Location = uriBuilder.Uri;
            }
            else
            {
                base.OnAuthorization(actionContext);
            }
        }
    }
}

WebApiConfig.cs:

public static void Register(HttpConfiguration config)
{
    config.Filters.Add(new RequireHttpsAttribute());
}

但就 Angular 路由(看起来不像https://myurl.com/api,而是看起来像的路由https://myurl.com/index.html#)而言,我无法让这些路由重定向到https. 必须在代码和代码中都指定http to https重定向是否正常?Web APIAngular

如果没有,也许我们需要将我们的网络服务器配置为仅使用https

标签: angularsslredirectasp.net-web-apihttps

解决方案


我通过在 web.config 中使用 URL 重写来做到这一点,如下所示:

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTPS" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="off" ignoreCase="true" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

这应该同时处理 WebApi 和 MVC/HTML/等。


推荐阅读