2017-01-09 10 views
1

この素敵な記事https://long2know.com/2016/07/asp-net-core-enforcing-https/に続いて、私はHTTPSを強制しようとしますが、組み込みシステムに対応していない1つのweb-apiコントローラSSLのこの問題は、startup.csの以下のConfigureセクションにあります。 AddRewriteラインとASP.NETコア1.1でhttpsにリダイレクトされるコントローラを除外する方法

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

     app.UseRewriter(options); 

(それが何かを置き換えるものではありません)私は、リダイレクトを回避するために、skipRemainingRulesをトリガしてみてください。これはIISエクスプレス(トラフのローカルホスト)の開発では機能しますが、IISの背後にある生産環境では機能しません。 Appelntly SkipRemainingRulesは、AddRedirectToHttpsの強制を妨げません。

これを解決する手がかりが多くありがたくありがとうございます。

答えて

0

http/httpsリダイレクトに関するAzure Webアプリケーションでさえ、IISと連携しているのはissueだと思います。

だから、これをacheiveするための1つの方法は、このようなweb.configを経由して、それを強制することです:あなたは内部apiのキーワードを除いて、すべてのurlためhttpsを施行している。この慣例により

<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> 

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の設定]セクションに登録:

+0

ありがとうございました。私はすでに、IISサーバーとその作業(展開中に置き換えられない限り)で直接行っています。そこで私はプロジェクトに移そうとしました。また、開発中にIIS Expressに追いつくために努力しました。しかし、ファイル自体に記述されているように、 'web.config'は 'appsettings.json'に取って代わられています。私は、生産環境と開発環境の両方に適合する画期的な方法を見つけることができません。 'startup.cs'ではなく – Andre

0

私は最終的にカスタムリダイレクトで固定します。

app.UseRewriter(新RewriteOptions()((新しいCustomRedirectを追加) ));

関連する問題