2017-01-09 10 views
1

Следуя этой красивой статье https://long2know.com/2016/07/asp-net-core-enforcing-https/, я пытаюсь внедрить HTTPS, но за исключением одного контроллера web-api, который должен реагировать на встроенную систему, не способную SSL. Проблема существует в следующем разделе конфигурации startup.cs.Как исключить контроллер перенаправления на https в ASP.NET Core 1.1

 var options = new RewriteOptions() 
      .AddRewrite("^api/&", "/api/", skipRemainingRules: true) 
      .AddRedirectToHttps(302, sslPort); 

     app.UseRewriter(options); 

С AddRewrite линии (что ничего не заменит) я пытаюсь вызвать skipRemainingRules для того, чтобы предотвратить перенаправление. Это работает при разработке в IIS express (через localhost), но не в производственной среде за IIS. По-видимому, SkipRemainingRules не препятствует вступлению AddRedirectToHttps.

Большое спасибо за любую подсказку, которая может решить эту проблему.

ответ

0

Я думаю, что существует issue, работающий с IIS даже в веб-приложениях Azure в отношении перенаправления http/https.

Так один из способов добиться этого является обеспечение его через web.config как это:

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

По этой конвенции вы исполнивший https для каждого url за исключением тех, с api ключевым словом внутри.

+0

спасибо Yaser. Я уже делал это непосредственно на сервере IIS и его работах (пока он не заменен во время развертывания!). Поэтому я попытался переместить его в проект, а также следить за IIS Express во время разработки. Но, как указано в самом файле, «web.config» заменяется «appsettings.json», и я не могу найти достойный выход, который подходит как для разработки, так и для разработки. Не в 'startup.cs' – Andre

0

я в конце концов это исправить с помощью пользовательского редиректа:

public class CustomRedirect : Microsoft.AspNetCore.Rewrite.IRule 
{ 
    public void ApplyRule(RewriteContext context) 
    { 
     var request = context.HttpContext.Request; 
     var host = request.Host; 

     // Exclude localhost 
     if (string.Equals(host.Host, "localhost", StringComparison.OrdinalIgnoreCase)) 
     { 
      context.Result = RuleResult.ContinueRules; 
      return; 
     } 

     // Exclude api 
     if (request.Path.Value.Contains("/api/")) 
     { 
      context.Result = RuleResult.ContinueRules; 
      return; 
     } 

     // force other traffic to https 
     if (string.Equals(request.Scheme, "http", StringComparison.OrdinalIgnoreCase)) 
     { 
      string path = "https://" + host.Value + request.PathBase + request.Path + request.QueryString; 
      context.HttpContext.Response.Redirect(path,true); 
      context.Result = RuleResult.EndResponse; 
     }  
    } 
} 

и зарегистрироваться в разделе Настройка из startup.cs:.

app.UseRewriter (новые RewriteOptions() Добавить (новый CustomRedirect()));

Смежные вопросы