【发布时间】:2017-08-02 18:35:30
【问题描述】:
我遵循了hello world示例表单IOptionsSnapshot,但是文件config.json更改并保存后内容没有刷新。
我的开发环境:
1.VS 2017
下面有2个.csproj文件
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
<PreserveCompilationContext>true</PreserveCompilationContext>
<AssemblyName>UsingOptions</AssemblyName>
<OutputType>Exe</OutputType>
<PackageId>UsingOptions</PackageId>
<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>
<PackageTargetFallback>$(PackageTargetFallback);dotnet5.6;portable-net45+win8</PackageTargetFallback>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Options" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.1" />
</ItemGroup>
下面是IOptionsSnapshot的代码
config.json:
{
"Time": {
"Message": "Hello "
}
}
public class TimeOptions
{
// Records the time when the options are created.
public DateTime CreationTime { get; set; } = DateTime.Now;
// Bound to config. Changes to the value of "Message"
// in config.json will be reflected in this property.
public string Message { get; set; }
}
public class Controller
{
public readonly TimeOptions _options;
public Controller(IOptionsSnapshot<TimeOptions> options)
{
_options = options.Value;
}
public Task DisplayTimeAsync(HttpContext context)
{
return context.Response.WriteAsync(_options.Message + _options.CreationTime);
}
}
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
// reloadOnChange: true is required for config changes to be detected.
.AddJsonFile("config.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; set; }
public void Configure(IApplicationBuilder app)
{
// Simple mockup of a simple per request controller that writes
// the creation time and message of TimeOptions.
app.Run(DisplayTimeAsync);
}
public void ConfigureServices(IServiceCollection services)
{
// Simple mockup of a simple per request controller.
services.AddScoped<Controller>();
// Binds config.json to the options and setups the change tracking.
services.Configure<TimeOptions>(Configuration.GetSection("Time"));
}
public Task DisplayTimeAsync(HttpContext context)
{
context.Response.ContentType = "text/plain";
return context.RequestServices.GetRequiredService<Controller>().DisplayTimeAsync(context);
}
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
【问题讨论】:
-
您更改的文件是否正确?如果基本路径是当前目录,并且您已经复制了配置,您是否应该更改构建文件夹中的那个?只是一个想法!
-
只有一个config.json文件,在VS里面。我查过了。
标签: c# asp.net-core asp.net-core-mvc