我嘗試了很多不同的東西,我只是厭倦了把我的頭撞在桌子上。ASP.Net核心:在哪裏放app.Use()來強制HTTPS
我正在創建一個ASP.NET Core MVC網站。該網站工作正常,直到我開始嘗試在SSL中測試功能。我試過以下鏈接:
- ASP.Net Core Enforcing HTTPS (Longing To Know)
- Testing SSL in ASP.NET Core (Wildermuth's Blog)
- Redirect to HTTPS (StackOverflow)
第三項保持重現上其他一些鏈接,所以我嘗試多種方式來獲取工作。我已將代碼設置移動到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日) 我發現,如果我手動輸入SSL端口號,在瀏覽器的網址時,系統進入SSL/HTTPS ......但是,即使在不需要安全性的頁面上,它也會停留在那裏。
我想要做的是在URL中顯示正確的端口號,而不需要手動輸入它們......並僅用於測試目的。
如上所述,試着在主頁上給出HTTP 404。我沒有選中該項目的屬性框,這是我擁有HTTPS端口的地方。如果我能避免它,我也寧願不使用Kestrel比項目中已經有的更多。我實際上確實遵循了你在發佈之前提供的鏈接,但是我沒有得到Wildermuth暗示的結果。 –
只要你在IISExpress中運行它,自簽名證書應該可以工作。您需要更改啓動網址以匹配您在勾選該框時生成的ssl網址。一旦你應用了過濾器,非SSL鏈接將會給404,所以如果你仍然使用它作爲可能是問題的啓動URL –