从Service Core上的一个ASP.NET核心网站公开两个端点

时间:2017-09-04 21:41:33

标签: c# asp.net-core azure-service-fabric asp.net-core-1.1 service-fabric-stateless

我在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网站上有两个监听器吗?如果是这样,你能指点我一个相关的资源吗?

1 个答案:

答案 0 :(得分: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) =>{[..]}));