代码之家  ›  专栏  ›  技术社区  ›  Kyle Vassella

在整个角度应用程序中强制http到https重定向

  •  0
  • Kyle Vassella  · 技术社区  · 6 年前

    我有一个 Angular (6) 应用程序使用 .net Web API

    我想强迫 http to https Web API 侧面处理-所有 /api 重定向到的路径 https http://csharp-video-tutorials.blogspot.com/2016/09/aspnet-web-api-enable-https.html

    创建 要求属性.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());
    }
    

    https://myurl.com/api ,但是看起来像 https://myurl.com/index.html# ),我无法让这些重定向到 https协议 . 必须说明是正常的吗 在中重定向两者 代码和 Angular

    如果没有,也许我们需要将web服务器配置为只使用 ?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sean    6 年前

    我是通过在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>