Пытаюсь предоставить больше информации и не уверен, насколько она актуальна. Один из наших webapi развернут в IIS: abcdomain.com/xyzweb. Мы начали обновлять нашу среду до .net 7 с .net 5. Веб-API также использует ServiceStack 6.4.
Один из маршрутов, определенных в плагине С# Webapi, ServiceStack, — «/api». До недавнего времени запросы к конечной точке abcdomain.com/xyzweb/api были в порядке. Но теперь (обновление .net 7?) мы заметили, что вызовы конечной точки не достигают обработчика (метод http get/post). У нас есть небольшое промежуточное программное обеспечение, определенное в методе конфигурации startup.cs, и мы видим поток выполнения через код промежуточного программного обеспечения, когда выполняется запрос abcdomain.com/xyzweb/api, и промежуточное программное обеспечение завершается вызовом next(), после чего поток выполнения теряется (webapi до сих пор жив).
После долгих испытаний я что-то прочитал, но не смог разобраться в содержании, пошел дальше и изменил определение маршрута на «/apihello» вместо «/api», после чего запросы начали работать, как раньше.
Любые указатели, что заставило его сломаться или что заставило его работать?
Поиск с «апи» затруднен, выдает только нерелевантные результаты.
Я хотел бы добавить, что перед изменением /api на /apihello http-запрос вернет HTTP-статус 200 (хотя он не пошел в обработчик) и необработанный ответ «Ошибка: System.NotImplementedException: операция '' не существует для эту услугу».
Не могли бы вы поделиться более подробной информацией о том, как вы настроили конечную точку API?
@MdFaridUddinKiron конечная точка — это просто «/api» для GET, POST и DELETE.
Обновлять:
Я воспользовался возможностью использовать предыдущий неиспользованный маршрут /api/
, чтобы вернуть индекс доступных API (, сгруппированных по тегам ) со ссылками на их прямой JSON API Route и просмотреть его в API Explorer, например:
Это изменение доступно в версии 6.6.1+, которая теперь доступна на MyGet.
Вы можете отключить (или изменить) предопределенный маршрут ServiceStack JSON/api с помощью:
ConfigurePlugin<PredefinedRoutesFeature>(feature => feature.JsonApiRoute = null);
@mythyz Ссылка, на которую вы ссылаетесь, побудила меня изменить /api на /apihello. Я сделал вывод, что маршрут по умолчанию /api теперь рассматривается как зарезервированный маршрут. Но текст не был прямо о том, как это изменение нарушит существующую реализацию, а ответ на http-запрос сбил с толку (я отредактировал свой вопрос вместе с ответом).
Предопределенный маршрут JSON API ожидает URL-адрес в формате /api/{RequestDto}
— если DTO запроса не соответствует допустимому имени DTO запроса, произойдет сбой. Отключите JsonApiRoute=null
, если хотите использовать /api*
для других целей.
так как я вижу, что вы являетесь участником репозитория сервисного стека, добавили мои предложения к ответу.
@padhu К вашему сведению, пустой маршрут /api/
теперь возвращает сгруппированный индекс API со ссылками на их прямые API и для просмотра API в API Explorer.
Позвольте мне начать с ответа на то, что предложение @mythz в соответствии с предопределенным JSON / API решило проблему. Но я не решаюсь принять это как ответ.
Может ли это быть связано?