1

我在 Service Fabric 2.7 上使用 ASP.NET Core 1.1 网站,这是一个面向公众的网站,所有通信都通过 SSL(端口 443)完成。

但是,如果有人尝试错误地连接到端口 80 (http),我想将他们转发到相同的 URL,但切换到端口 443 (https)。

我实现这一点的方法是在同一个 ASP.NET Core 应用程序中使用两个端口侦听器,因为为端口重定向提供额外的无状态服务似乎很荒谬。

我的问题是:

  1. 从端口 80 转发到端口 443 有比这个更好的技巧吗?
  2. 我可以在同一个 ASP.NET Core 网站中拥有两个侦听器吗?如果是这样,你能指出我的相关资源吗?
4

1 回答 1

0

添加重定向规则以强制执行 https:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

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

    app.UseRewriter(options);

服务清单:

<Resources>
  <Endpoints>
    <Endpoint Name="ServiceEndpoint1" Protocol="http" Port="80"/>
    <Endpoint Name="ServiceEndpoint2" Protocol="https" Port="443"/>
  </Endpoints>
</Resources>

通讯听众:

var endpoints = Context.CodePackageActivationContext.GetEndpoints()
   .Where(endpoint => endpoint.Protocol == EndpointProtocol.Http || endpoint.Protocol == EndpointProtocol.Https)
   .Select(endpoint => endpoint.Name);

return endpoints
   .Select(endpoint => new ServiceInstanceListener(serviceContext => 
      new KestrelCommunicationListener(serviceContext, endpoint), (url, listener) =>{[..]}));
于 2017-09-05T06:09:08.140 回答