Перемещение Настроек к другому файлу конфигурации

На консоли ничего не печатается, потому что вы не подписались на decodedRequest, поскольку мы знаем один из аспектов Reactive:

Ничего не происходит, пока вы не подпишетесь

blockquote> [ 1114] Но если вы сделаете это, вы увидите печатное тело на консоли, но ваш код не будет работать, потому что следующие операторы не смогут прочитать тело, и вы получите IllegalStateException ( Разрешено только одному соединению получать подписчика. )

Итак, как ее решить?

  1. Создайте свою собственную оболочку для ServerWebExchange (пожалуйста, прочитайте об этом здесь: Как регистрировать тела запросов и ответов в Spring WebFlux )
  2. Регистрировать тела в HttpMessageDecoder. Например, если вы видите AbstractJackson2Decoder, вы найдете код, в котором Spring декодирует ваш буфер в объект и может записать его:

    try { Object value = reader.readValue(tokenBuffer.asParser(getObjectMapper())); if (!Hints.isLoggingSuppressed(hints)) { LogFormatUtils.traceDebug(logger, traceOn -> { String formatted = LogFormatUtils.formatValue(value, !traceOn); return Hints.getLogPrefix(hints) + "Decoded [" + formatted + "]"; }); } return value; }

11
задан empi 4 May 2009 в 19:59
поделиться

5 ответов

Этот вопрос долгое время не отмечался как ответ. Что ж, под ответом marc_s есть комментарии, объясняющие, что это невозможно. Я не хотел отмечать ответ marc_s как принятый, потому что комментарии говорят прямо противоположное, чем ответ. Итак, ответ таков: к сожалению, это невозможно.

0
ответ дан 3 December 2019 в 02:53
поделиться

Хм ... Я знаю, что это возможно, потому что я знаю, что мы делали это на предыдущей работе. Я не помню точно, как, хотя. Я считаю, что у нас был родительский проект, который мы использовали для наследования настроек, и был ручной шаг, посредством которого, если мы внесли изменения в applicationSettings в подпроекте, нам нужно было вручную скопировать изменения в родительский проект (но затем они были унаследованы всеми дочерними проектами).

Извините за отсутствие конкретики; Я не был тем, кто реализовал решение, и со временем оно стало для меня немного размытым. Однако я помню, что мы смогли это сделать, и я думаю, что мои воспоминания точны относительно того, как мы это делали.

0
ответ дан 3 December 2019 в 02:53
поделиться

Да, конечно, это возможно! Любой ConfigurationSection в любом из ваших файлов конфигурации может быть «выведен» с помощью атрибута configSource = «otherConfigFile.config».

Было бы еще лучше, если бы я мог заставить класс настроек использовать appSettings, а не applicationSettings.

Чтобы сделать это, вам нужно уйти от использования хороших визуальных классов «Настройки» в .NET и напрямую использовать ConfigurationManager. Таким образом, вы можете поместить свои настройки в и прочитать их, используя ConfigurationManager.AppSettings ["keyname"].

Marc

2
ответ дан 3 December 2019 в 02:53
поделиться

Если бы это был мой проект, я бы избавился от applicationSettings и переместил бы все в раздел appSettings. Значение applicationSettings заключается в том, что значения могут быть строго типизированы и доступны для Intellisense. Ни один из них не особенно выгоден для вашей ситуации. Конечно, этот большой хит в переносе всего не стоит, если вы все еще создаете настройки с помощью дизайнера.

1
ответ дан 3 December 2019 в 02:53
поделиться

Ваааай, опоздал с этим вопросом, но я только что бился головой о стену. этот. Оказывается, вы можете сделать это, но не для всего узла applicationSettings, вам нужно сделать каждый дочерний узел applicationSettings отдельно. Я получил волшебную информацию из нижней части статьи MSDN SectionInformation.ConfigSource .

app.config / web.config contents

<applicationSettings>
    <TestWebApplication.Properties.Settings configSource="externalfile.config" />
</applicationSettings>

externalfile.config content:

<TestWebApplication.Properties.Settings>
    <setting name="AnotherSetting" serializeAs="String">
        <value>Another setting value</value>
    </setting>
</TestWebApplication.Properties.Settings>
27
ответ дан 3 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: