ASP.Net Core应用程序在visual studio中运行,但不适用于dotnet运行
我有一个asp.net核心应用程序,我开始通过visual studio构建,通常它按下F5或在visual studio中按调试按钮时工作正常。
但是,如果我尝试从命令行使用dotnet run
,它仍然可以工作并开始监听默认端口5000(我假设这是红隼监听)。
但是,如果我尝试使用http:// localhost:5000通过任何浏览器访问该页面,我只是得到错误,说无法连接。 我明白,如果我从visual studio运行,它会自动将我的应用程序放在IIS后面,但我不明白为什么如果应用程序只是自托管它不起作用。
我想把我的项目转移到linux环境,这是现在唯一似乎阻止我的事情。 我已经测试过通过cli创建新的dotnet应用程序,如果我尝试通过浏览器访问这些工作正常,它似乎我在VS中创建的这个特定的应用程序不起作用。
我的dotnet --version
返回1.0.4
编辑(详细答案)
因此,为了增加Sanket下面的答案,我还想出了为什么我的应用程序只有在我将ASPNETCORE_ENVIRONMENT
设置为开发时才能正常工作的真正原因。
事实certificate,我已经设置了一个测试邮件服务,只有在我的环境是开发时才配置:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, WorldContextSeedData seeder) { if (env.IsEnvironment("Development")) { app.UseDeveloperExceptionPage(); loggerFactory.AddDebug(LogLevel.Information); } }
但是在我的一个控制器中,我没有像这样检查环境,而是将电子邮件服务初始化:
public AppController(IMailService mailService, IConfigurationRoot config, WorldRepository repository, ILogger logger, IHostingEnvironment env) { _env = env; _mailService = mailService; _config = config; _repository = repository; _logger = logger; }
当我决定为Staging环境配置UseDeveloperExceptionPage()
时,我意识到了这个问题,一旦我运行问题,它就变得很明显了。 我的控制器类在首先没有配置邮件服务时尝试初始化它。 所以我对控制器进行了一些更改,如下所示:
public AppController( #if Development IMailService mailService, #endif IConfigurationRoot config, IWorldRepository repository, ILogger logger, IHostingEnvironment env) { _env = env; #if Development _mailService = mailService; #endif _config = config; _repository = repository; _logger = logger; }
现在我的应用程序适用于任何环境。
发生错误,因为ASPNETCORE_ENVIRONMENT变量的值不同。 在Visual Studio的情况下,它设置为Development
,如果是dotnet cli(正如您在有问题的屏幕截图中看到的那样),那就是Production
。
要使用命令行设置ASPNETCORE_ENVIRONMENT变量,请使用以下命令 –
setx ASPNETCORE_ENVIRONMENT "Development"
有关如何设置托管环境的更多信息,请参阅此文章 。