.Net Core 2.1 - чтение appsettings.json в файле javascript - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть веб-приложение в .net Core 2.1, использующее signalR.Мне нужно передать HubUrl в пользовательский файл JavaScript.Это возможно в .net Core?

Пример кода js:

const connection = new signalR.HubConnectionBuilder()
.withUrl('http://localhost:5000/hub') //Here I need to read appSettings.json to get value from there
.configureLogging(signalR.LogLevel.Information)
.build();

Ответы [ 4 ]

0 голосов
/ 04 апреля 2019

с уважением к ответу "Максемеляна", расширяя ответ, добавляя проверочные случаи для проверки

  1. Если имя раздела равно нулю
  2. Игнорирование секрета

        private readonly IConfiguration configuration;
    
        public MyController(IConfiguration configuration){
             this.configuration = configuration;
        }
    
    
            [HttpGet("[action]")]
            public ActionResult GetConfigurationValue(string sectionName, string paramName)
            {
                if (paramName.ToLower().Contains("secret")) {
                    return null;
                }
    
                var parameterValue = (!string.IsNullOrEmpty(sectionName)) ? config[$"{sectionName}:{paramName}"] : config[$"{paramName}"];
                return Json(new { parameter = parameterValue });
            }
    
0 голосов
/ 27 сентября 2018

Очень безопасный, но гибкий способ сделать это - отобразить URL в блоке <script> в представлении.Таким образом, вы не выставляете конфигурацию приложения (доступ к которой вам придется защищать очень хорошо), а вместо этого просто явно предоставляете одно защищенное значение.

Это также дает дополнительное преимущество: вам не нужно делатьзапрос к конечной точке (какой адрес вы на самом деле также должны знать в своем скрипте), но сразу получите значение там, где вам это нужно.

Чтобы сделать это, вы можете просто отобразить тег <script>, который определяетзначение во всем мире.Например, у вас может быть следующее в вашем макете:

<script>
window._signalRAddress = @Json.Serialize(ViewData["SignalRAddress"]);
</script>
<script src="~/your-custom-script.js"></script>

И тогда вы просто используете window._signalRAddress внутри вашего скрипта.

0 голосов
/ 08 января 2019

В SPA с веб-пакетом вы можете просто импортировать appsettings.json и сделать его доступным через удобный класс, который вы импортируете;

например,

appsettings.js:

appsettingsjson = process.env.NODE_ENV === 'development'
    ? require('./appsettings.Development.json')
    : require('./appsettings.json');

class AppConfig {

    constructor() {
    }

    static Settings() {
        return appsettingsjson;
    }
}

module.exports = AppConfig;

Тогда, где вам это нужно, просто импортируйте и используйте.Например:

const AppConfig = require("./appsettings");
console.log(AppConfig.Settings().YourSection.YourParameter)
0 голосов
/ 27 сентября 2018

appsettings.json находится на сервере.Поэтому вам нужно добавить конечную точку в контроллер, который возвращает нужное значение.

Контроллер:

public class MyController:Controller{
    private readonly IConfiguration configuration;

    public MyController(IConfiguration configuration){
         this.configuration = configuration;
    }

    [HTTPGet]
    public ActionResult GetConfigurationValue(string sectionName, string paramName){
        var parameterValue= configuration[$"{sectionName}:{paramName}"];
        return Json(new { parameter= parameterValue});
    }
}

Клиентская сторона:

$.ajax({
    type:"GET",
    url: "/MyController/GetConfigurationValue"
    data:{
        sectionName = "MySection",
        paramName = "MyParameter"
    }
}).done(
    function(parameterValue){
        //do what you need
});

В appsettings.json:

{
    "MySection":{
        "MyParameter":"value that I want to get"
    }
}
...