我尝试过很多不同的事情,我只是厌倦了把头撞在桌子上。
我正在创建一个ASP.NET Core MVC网站。该网站工作正常,直到我开始尝试在SSL中测试功能。我尝试过以下链接:
第三项继续出现在其他一些链接上,因此我尝试了多种方法来实现这一点。我已将代码设置移动到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);
}
}); // */
}
更新:(2017/01/26) 我发现如果我在浏览器URL中手动输入SSL端口号,系统会输入SSL / HTTPS ...但它会保留在那里,即使在不需要安全性的页面上也是如此。
我要做的是在URL中显示正确的端口号,而无需手动输入...并且仅用于测试目的。
答案 0 :(得分:0)
您在配置服务中执行此操作:
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
但是如果没有ssl证书,则会失败(404)。 running directly from kestrel与IIS Express不同。使用VS 2015,您可以选中项目属性中的框以使用ssl,它将自动为IIS Express生成自签名证书
答案 1 :(得分:0)
你可以在sudo service mongodb stop
sudo rm -rf /var/lib/mongodb/journal/*
sudo service mongodb start
之前做你正在做的事情。然后,任何对文件或MVC路由的调用都将被重定向到安全版本。
app.UseStaticFiles();
我刚刚写了一篇关于此的小文章:https://joonasw.net/view/enforcing-https-in-aspnet-core。
答案 2 :(得分:0)
您可以在添加mvc时配置它。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.SslPort = 433; // your ssl port no
options.Filters.Add(new RequireHttpsAttribute());
});
}