首先,这是在Mac中发生的,我是dotnet core的新手。
我已经安装了docker,并在dotnet core中设置了所有内容。我确实在'appsettings'和'appsettings(Development)'中添加了连接字符串。
"ConnectionStrings": {
"Default": "server=localhost; database=Monitor; User ID=sa; Password=MyComplexpPassword!234;"
},
这是Program.cs文件的主要方法
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
这是startup.cs类的ConfigureServices方法。
public void ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddDbContext<MonitorDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Default")));
// In production, the Angular files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
services.AddScoped<IUserRepository,UserRepository>();
}
这是用于测试API的Controller测试方法。
[HttpGet("getUser")]
public UserResource GetUserInfo()
{
var user_1 = new User();
user_1.FirstName = "MAC";
user_1.LastName = "OS TEST";
user_1.Username = "Apple@gmail.com";
return mapper.Map<User, UserResource>(user_1);
}
如果我进行了一次休息呼叫(http)而没有设置Program.cs类进行远程访问,则此方法将完美执行。
现在,我已将其设置为在“ http://0.0.0.0:6001”中运行,以便可以从手机或同一台wifi中的另一台PC访问API。 我关注了This instructions。
现在,我的Program.cs主要方法是这样的。
public static void Main(string[] args)
{
// CreateWebHostBuilder(args).Build().Run();
var configuration = new ConfigurationBuilder()
.AddCommandLine(args)
.Build();
var hostUrl = configuration["hosturl"];
if (string.IsNullOrEmpty(hostUrl))
hostUrl = "http://0.0.0.0:6000";
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls(hostUrl) // <!-- this
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseConfiguration(configuration)
.Build();
host.Run();
}
在终端中,我运行了此命令dotnet run --hosturl http://0.0.0.0:6001
注意:-我只更改了主机,因为我需要与其他设备一起测试API。
我还有其他控制器和方法正在连接到数据库并使用它进行原始操作,这些API调用也面临着同样的问题。仅当我将其设置为远程访问时,这种情况才会发生。
注意:-如果我这样更改Startup.cs类的连接字符串行,它将在两种配置中均能正常工作。
services.AddDbContext<MonitorDbContext>(options => options.UseSqlServer("server=localhost; database=Monitor; User ID=sa; Password=MyComplexpPassword!234;"));
但是我觉得这不是一个好习惯。将来,我必须将JWT身份验证添加到API,以便还需要将APP_Secret添加到AppSettings.json文件中。
谢谢。
答案 0 :(得分:3)
您没有告诉应用程序使用appsettings.json
。更改以下配置
var configuration = new ConfigurationBuilder()
.AddCommandLine(args)
.Build();
收件人
var configuration = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddCommandLine(args)
.Build();
答案 1 :(得分:0)
或者,您可以使用静态WebHost.CreateDefaultBuilder
方法,该方法默认情况下从“ appsettings.json”,“ appsettings。[EnvironmentName] .json”,和命令行加载设置args。
注意->如here所述:
AddCommandLine
已被CreateDefaultBuilder
调用。如果你 需要提供应用配置,并且仍然能够覆盖该配置 使用命令行参数进行配置,请调用应用程序的其他ConfigureAppConfiguration
中的提供者并最后致电AddCommandLine
。
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
// Call other providers here and call AddCommandLine last.
config.AddCommandLine(args);
})
.UseStartup<Startup>();