Ald*_*jal 9 c# asp.net asp.net-core-2.0
我在ASP.NET Core项目的appSettings.json中添加了一个CustomSettings部分键:
{
"ConnectionStrings": {
"DefaultConnectionString": "Data Source=..."
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"CustomSettings": {
"Culture": "es-CO"
}
}
Run Code Online (Sandbox Code Playgroud)
我无法在以下控制器中加载Culture键:
public AccountController(
UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager,
IEmailSender emailSender,
ILogger<AccountController> logger,
IConfiguration configuration)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(configuration.GetSection("CustomSettings")["Culture"])),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
}
Run Code Online (Sandbox Code Playgroud)
无论我是否遵循,总是返回NULL:configuration.GetSection("CustomSettings")["Culture"]; configuration.GetSection( "CustomSettings")的GetValue( "文化").
我尝试了基于ASP.NET Core的帮助:在Web项目和类库中访问appsettings.json的分步指南,我创建了具有字符串Culture属性的CustomSettings类,并在Startup中注入如下:
// Load Custom Configuration from AppSettings.json
services.Configure<Models.CustomSettings>(Configuration.GetSection("CustomSettings"));
Run Code Online (Sandbox Code Playgroud)
通过注入IOptions customSettings访问,customSettings.Value.Culture的值返回NULL.
第一个问题:¿我做错了什么或缺少什么?
第二个问题:¿为什么在HomeController的索引中执行以下操作会引发异常?
public class HomeController : Controller
{
public IActionResult Index(IConfiguration configuration)
{
}
}
Run Code Online (Sandbox Code Playgroud)
例外:
处理请求时发生未处理的异常.InvalidOperationException:无法创建类型为'Microsoft.Extensions.Options.IOptions`1 [[OmniMerchant.Models.CustomSettings,OmniMerchant,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'的实例.模型绑定的复杂类型不能是抽象或值类型,并且必须具有无参数构造函数.
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CreateModel(ModelBindingContext bindingContext)
第三个问题:我需要根据appSettings.json上的Culture属性在后台为所有应用程序设置Culture,我阅读了MSDN文档,但我无法实现这一点,¿我怎样才能实现这一目标?
谢谢
首先创建与appsetting部分匹配的模态
public class CustomSettings
{
public string Culture { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后在Startup.cs中的ConfigureServices方法中注册它
services.Configure<CustomSettings>(Configuration.GetSection("CustomSettings"));
Run Code Online (Sandbox Code Playgroud)
然后使用需要的IOptions注入它
AccountController(IOptions<CustomSettings> settings)
{
_settings = settings.Value;
}
Run Code Online (Sandbox Code Playgroud)
默认情况下有两个配置文件。用于发布版本,一个用于调试。您是否检查过您实际上编辑了正确的内容(可能是appsettings.Development.json)
在 .NET Core 中,基本上可以通过两种方式使用 DI。通过将其注入构造函数或直接注入方法中。在第二个选项中,您必须使用特殊属性[FromServices]
归档时间: |
|
查看次数: |
5506 次 |
最近记录: |