2017-01-22 4 views
0

私はさまざまなことを試しましたが、私は自分の机の上で頭を叩いて疲れています。ASP.Net Core:HTTPSを強制的に呼び出すapp.Use()呼び出しの場所

私はASP.NET Core MVC Webサイトを作成しています。このサイトは、SSLで機能をテストしようとするまでうまく動作します。 3番目の項目は、他のリンクの数に再び登場まま、私はその作業を取得する複数の方法を試みた

:私は、次のリンクを試してみました。 StartupクラスのConfigureメソッドのいくつかの場所にコード設定を移動しました。 app.UseMvc()コールの前にコードセグメントを置くと、私は絶対に何も得られません。ホームページ(SSLの下にない)が出てこないので、リンクをたどることはできません。 app.UseMvc()コールの後に配置すると、[RequireHttps]属性を使用するメソッドは「存在しない」リンクに移動します。私はMVCを使いたいので、意味があります。しかし、HTTPSをどのようにテストできますか?

app.Use(async (context,next)...のコードはどこにありますか?

私の現在のStartup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 
      var sslPort = Configuration.GetValue<int>("iisSetting:iisExpress:sslPort"); 

    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
     app.UseBrowserLink(); 
    } 
    else 
    { 
     app.UseExceptionHandler("/Home/Error"); 
    } 

    app.UseStaticFiles(); 

    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Index}/{id?}"); 
    }); 

    app.Use(async (context, next) => 
    { 
     if (context.Request.IsHttps) 
      await next(); 
     else 
     { 
      var sslPortStr = ((sslPort == 0) || (sslPort == 443)) ? string.Empty : ($":{sslPort}"); 
      var sslUrl = $"https://{context.Request.Host.Host}{sslPort}{context.Request.Path}"; 
      context.Response.Redirect(sslUrl); 
     } 
    }); // */ 
} 

UPDATE:(2017年1月26日)私は手動でブラウザのURLにSSLポート番号を入力した場合、システムはSSLに入ることを発見した /HTTPS ...しかし、それはセキュリティを必要としないページでさえそこにとどまります。

私がしようとしているのは、正しいポート番号を手動で入力する必要がなく、テスト目的のためだけにURLに表示させることです。

答えて

0

あなたは、configureサービスでそれを行う:なしSSL証明書がない場合

services.Configure<MvcOptions>(options => 
{ 
    options.Filters.Add(new RequireHttpsAttribute()); 
}); 

しかしそれは、(404)失敗します。 running directly from kestrelはIIS Expressと異なる場合があります。 VS 2015を使用すると、プロジェクトプロパティでsslを使用するようにチェックすることができ、IIS Express用に自動的に自己署名付き証明書が生成されます。

+0

上記のように、これを試行すると、ホームページでHTTP 404が表示されます。私はHTTPSポートを持っているプロジェクトのプロパティのボックスにチェックを入れました。私はそれを避けることができれば、すでにプロジェクトに入っている以上にKestrelを使用しないことを好むだろう。私は実際にあなたが投稿する前にあなたが提供したリンクに従っていましたが、私はWildermuthが意味する結果を得ていません。 –

+0

IISExpressで実行する限り、自己署名証明書が機能するはずです。そのボックスにチェックを入れたときに生成されたSSL URLと一致するように、起動URLを変更する必要があります。非SSL URLは、フィルタを適用すると404になります。まだ問題の可能性がある起動URLとしてこれを使用している場合 –

0

app.UseStaticFiles();の前に行うことができます。ファイルまたはMVCルートの呼び出しは、セキュアバージョンにリダイレクトされます。

app.Use(async (context, next) => 
{ 
    if (context.Request.IsHttps) 
     await next(); 
    else 
    { 
     var sslPortStr = ((sslPort == 0) || (sslPort == 443)) ? string.Empty : ($":{sslPort}"); 
     var sslUrl = $"https://{context.Request.Host.Host}{sslPort}{context.Request.Path}"; 
     context.Response.Redirect(sslUrl); 
    } 
}); 
app.UseStaticFiles(); 

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "default", 
     template: "{controller=Home}/{action=Index}/{id?}"); 
}); 

私はちょうどこれに小さな記事:https://joonasw.net/view/enforcing-https-in-aspnet-coreを書きました。

+0

これを実行すると、HTTP 404が返されます。 –

+0

申し訳ありません。何らかの理由で、以前の投稿を編集できません。私はapp.UseMvc呼び出しの前にどこでもapp.Use呼び出しを移動すると私はホームページでHTTP 404を取得します。私はあなたのリンクか、ミドルウェアの作成について話した同様のリンクを見つけました。私の問題は、私が瞬間にテストしようとしていることです。すべてのアカウントで、サイトを公開すると、有効な証明書があればHTTPSが動作します。 HTTPSだけをテスト目的で追加する方法はありますか? –

0

mvcを追加するときに設定できます。

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(options => 
    { 
     options.SslPort = 433; // your ssl port no 
     options.Filters.Add(new RequireHttpsAttribute()); 
    }); 
} 
+0

これはまた、ホームページにHTTP 404を提供します。 –

関連する問題