Делаю небольшое веб-приложение для работы с лаками для ногтей.
И нужно мне как-то визуально определять, работаю я в данный момент на продакшн версии сайта или на девелоперской, я обычно смотрю на внешний вид логотипа в шапке: на продакшене выглядит так
А dev версия выглядит так:
И сейчас это сделано через анализ адресной строки, в файле Views/Shared/_Layout.cshtml:
@functions{
private bool IsDevEnv()
{
return Context.Request.Host.Value.Contains("localhost");
}
}
<!DOCTYPE html>
<html>
....
@if (IsDevEnv())
{
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">Polish <span>Hub</span></a>
}
else
{
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">Polish Hub</a>
}
Однако это не совсем то, что мне нужно: мне нужно проверять параметры sql server connection string, а не hostname сервера. (К сожалению, таковы особености appharbor'а по работе с core на текущий день - в классическом asp.net mvc нормально происходят замены переменных)
Как можно добраться до этих настроек (connection string)в asp.net core?
Можно ли как-то в view добраться до Configuration.GetConnectionString? Или, если нельзя, то с какого уровня определить переменную mode (prod/dev), чтобы пробрасывать её в layout страницы.
До настроек во View можно добраться через @inject
Допустим у нас в appSettings.json
написано такое
{
"SomeOption" : {
"SomeProp" : 1000
}
}
Создадим класс MyAppOptions
и в нем создадим свойство с названием совпадающим с названием опции
public int SomeProp { get; set; }
Теперь перейдем к Startup.cs
в нем у нас уже должно быть поле
private readonly IConfiguration _configuration;
которому присваивается значение через конструктор. Далее переходим в метод ConfigureServices(...)
и добавляем такое
services.Configure<MyAppOptions>(_configuration.GetSection("SomeOption"));
Теперь во View
@using Microsoft.Extensions.Options
@inject IOptions<MyAppOptions> options
@в нужном месте@
@options.Value.SomeProp
Спасибо @Bullson за указание правильного ответа, сделал у себя так:
В startup.cs:
services.Configure<MyAppOptions>(options =>
{
options.SqlConnectionStringBuilder = new SqlConnectionStringBuilder(Configuration["ConnectionStrings:DefaultConnection"]);
});
Сам класс настроек:
public class MyAppOptions
{
public SqlConnectionStringBuilder SqlConnectionStringBuilder { get; set; }
public bool IsDevEnv => this.SqlConnectionStringBuilder.IntegratedSecurity;
}
(Я воспользовался тем, что на dev окружение я захожу без пароля по логину windows)
И во Views/Shared/_Layout.cshtml я делаю inject настроек:
@using AuroraBorealis.PolishHub.WebApp.Data
@using Microsoft.Extensions.Options
@inject IOptions<MyAppOptions> options
<!DOCTYPE html>
<html>
....
@if (options.Value.IsDevEnv)
{
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">Polish <span>Hub</span></a>
}
else
{
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">Polish Hub</a>
}
Ссылки по теме:
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Здравствуйте, сделал элемент UserControl, который может иметь разные высоту и ширинуНеобходимо создать алгоритм который будет при добавлении...
Создал класс для валидации пользователяМетод ValidateAsync возвращает, что ошибок нет (Errors