Configuration.GetSection возвращает нулевое значение

Я не могу получить Configuration.GetSection вернуть данные в .Value, Я думаю, что я выполнил все предложения из этого вопроса, но все еще не могу заставить его работать.

appsettings.json

{
    "AmazonSettings": {
       "BaseUrl": "https://testing.com",
       "ClientID": "123456",
       "ResponseType": "code",
       "RedirectUri": "https://localhost:44303/FirstTimeWelcome"
    },
}

Запускать:

public IConfiguration Configuration { get; }

public Startup(IHostingEnvironment env)
{
    //Set up configuration sources.
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json")
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}

ConfigurationServices:

public void ConfigureServices(IServiceCollection services)
{

    services.AddOptions();

    services.Configure<AmazonSettings>(Configuration.GetSection("AmazonSettings"));

    services.AddMvc()

Класс AmazonSettings:

public class AmazonSettings
{
    public string BaseUrl { get; set; }
    public string ClientID { get; set; }
    public string RedirectUri { get; set; }
    public string ResponseType { get; set; }

}

Я пытаюсь получить доступ к AmazonSettings.Value через IOptions:

public class HomeController : Controller
{
    private readonly AmazonSettings _amazonSettings;

    public IActionResult Index()
    {
        ViewBag.LoginUrl = _amazonSettings.BaseUrl;
        return View("/Pages/Index.cshtml"); ;
    }

    public HomeController(IOptions<AmazonSettings> amazonSettings)
    {
        _amazonSettings = amazonSettings.Value;
    }

Когда я отлаживаю, значение пусто:

Отладка - значение пусто

1 ответ

Решение

Моя проблема заключалась в том, что мой код в HomeController никогда не попадал под удар.

Я мог туда добраться, и.Value был заполнен, если бы я добавил Routes["home"] над моим контроллером и перешел к localhost/home. Однако я не смог использовать Routes[""], потому что я использую страницы Razor, и это вызвало исключение ambiguousActionException.

Затем я понял, что мне вообще не нужно использовать контроллер с Razor Pages. Я мог бы просто получить доступ к своим данным напрямую из Index.cshtml.cs

public class IndexModel : PageModel
    private readonly AmazonSettings _amazonSettings;
    public string LoginUrl;

    public IndexModel(IOptions<AmazonSettings> amazonSettings)
    {
        _amazonSettings = amazonSettings.Value;
    }

Со следующим доступом на моей странице Index.cshtml:

<a href=@Model.LoginUrl><h1>@Model.LoginUrl</h1></a>

Оказывается, что при отладке.Value, возвращаемое GetSection в коде запуска, может быть нулевым, однако оно заполняется к тому времени, когда достигает IndexModel.

Другие вопросы по тегам