URL слишком длинный для OData и ASP. NET Core - PullRequest
0 голосов
/ 22 апреля 2020

Я настроил службу OData, используя ASP. NET Базовый веб-API с OData ( Microsoft.AspNetCore.OData ).

У моей несвязанной функции есть один параметр, принимающий строку, которая может быть очень длинной: http://localhost:5000/odata/MyFunction(ids='a,b,c,d,e,f').

Это прекрасно работает, если длина ids не становится слишком большой. Однако при передаче слишком длинной строки запрос завершается с HTTP 400.

Я уже пробовал это - к сожалению, это не сработало.

Как мне настроить приложение, чтобы длинные запросы поддерживались как на производстве ( Kestrel ) и режим dev ( IIS Express)?

1 Ответ

0 голосов
/ 23 апреля 2020

Проблема не в длине самого URL. Вместо этого он связан с функциями OData, которые приводят к очень длинному URL сегменту . На Windows это, кажется, ограничено 260 символами. Так что в моем случае сегмент URL MyFunction(ids='a,b,c,d,e,f') слишком длинный.

Я нашел два разных подхода:

  1. Изменение Windows параметра реестра ( см. Здесь ). Я не проверял это, но комментарии в другой ветке выглядят многообещающими.
  2. Использование Псевдонимы параметров .

Я выбрал второй подход, так что теперь мой URL выглядит так: http://localhost:5000/odata/MyFunction(ids=@p1)?@p1='a,b,c,d,e,f'. Приятно то, что мне не пришлось ничего менять в конфигурации OData - это просто работает.

После небольшого тестирования я достиг максимальной длины строки запроса. Я решил эту проблему, представив файл web.config со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="20100" maxQueryString="20000" />
      </requestFiltering>
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime maxUrlLength="20100" maxQueryStringLength="20000" />
  </system.web>
</configuration>

Недостатком второго подхода является то, что Power BI Desktop, похоже, не поддерживает это легко. Мне не удалось добавить псевдоним параметра в простой пользовательский интерфейс при просмотре службы OData. Однако при создании параметра Power BI с длинной строкой запроса я смог самостоятельно создать URL-адрес OData с параметром Power BI и псевдонимом параметра.

...