Asp.net core HttpsRedirectionMiddleware 无法确定重定向的 https 端口

55

我试图在Windows服务中托管一个ASP.net Core Web应用程序。我能够创建一个自包含的部署并创建了Windows服务。我的Web应用程序配置为使用5000端口进行HTTP通信,使用5001端口进行HTTPS通信。在应用程序内部,我使用了一个HttpsRedirectMiddleware。

当我启动Windows服务时,只能通过HTTP浏览网页,并从Https重定向中间件抛出以下错误:

Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware未能确定重定向的https端口。

是否需要进行额外的配置来公开用于HTTPS通信的端口?

Github代码示例


如果没有看到您的原始代码,我们将无法知道如何对您现有的代码库进行更改。请发布一个最小可复现示例(MRE),并详细解释需要修改的内容。 - Jim G.
我们无法在没有看到您的原始代码的情况下知道如何对您现有的代码库进行更改。请发布一个[mre],并详细解释需要修改的内容。 - undefined
7个回答

15

请查看文档,了解配置非默认 HTTPS 端口的各种方法。

哪种方法最适合您的方案取决于应用程序的设置和托管方式。例如,您可以添加一个设置:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseSetting("https_port", "5001")
        .UseStartup<Startup>();

10

在调试模式下出现了这个警告。你只需要“启用SSL”,警告就会消失。

enter image description here

如果您使用IIS,您可以编辑高级设置以启用https。 enter image description here

9

我遇到了完全相同的错误。在我的情况下,launchSettings.json文件中有两个配置文件。我只需删除其中一个配置文件,该配置文件包含http和https URL。

"profiles": {
  "https": {
    "commandName": "Project",
    "dotnetRunMessages": true,
    "launchBrowser": true,
    "launchUrl": "swagger",
    "applicationUrl": "https://localhost:7009;http://localhost:5195",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  },
}

谢谢。从个人资料中删除http解决了问题。 - Reza Taba
你可以使用 dotnet watch -lp https 来启动一个特定的配置文件。 - Simon_Weaver
你可以使用 dotnet watch -lp https 来启动一个特定的配置文件。 - undefined

4
你会收到这个错误是因为https开发证书不被信任。应该有更好的错误提示信息。
dotnet dev-certs https --trust

0
你可能会在区域方面遇到问题。你需要在所有控制器的区域属性中添加。这是一个我的控制器路由的例子。
控制器的例子:
[Area("home")] //You need this
public class HomeController : Controller

地图控制器路由示例
app.MapControllerRoute(
    name: "default",
    pattern: "{area=Home}/{controller=Home}/{action=Index}/{id?}");

1
请将所有代码以文本形式添加,并附上一些解释。 - undefined

-1

这是针对.NET 7.0的

  • 选择HTTP配置文件的代码块。
  • 使用命令Ctrl + X剪切该代码块。
  • 然后使用Ctrl + Z粘贴,就像在执行上一步之前一样。

运行以下命令 dotnet build dotnet watch

请注意,这是我所做的,我的开发服务器再次正常运行。


如果这样解决了问题,很可能是重建或缓存的问题,重新构建所有可能是更快消除这个问题的方法。 - FrozenKiwi
如果这样解决了问题,很可能是重建或缓存问题,重新构建所有可能是更快的消除方法。 - undefined

-3
在 .NET 6 中,对 program.cs 进行以下更改:
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment() || app.Environment.IsProduction())
{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI();

}


app.UseCors(builder => builder
    .AllowAnyOrigin()
    .AllowAnyMethod()
    .AllowAnyHeader());
app.UseAuthentication();;

app.UseAuthorization();

app.MapControllers();

app.Run();

8
目前您的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解如何回答问题。您可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接