Saturn API не отвечает на GET при использовании acceptJson - PullRequest
3 голосов
/ 04 февраля 2020

Веб-инфраструктуре F # Saturn не удается получить значение для метода GET, когда acceptJson является частью конвейера.

Ниже приведен пример кода, который я запускаю для воспроизведения проблемы:

let api = pipeline {
    plug acceptJson
    set_header "x-pipeline-type" "Api"
}

let apiRouter = router {
    not_found_handler (setStatusCode 404 >=> text "Api 404")
    pipe_through api
    get "/test" (text "Hello world")
}

let appRouter = router {
    forward "/api" apiRouter
}

appRouter затем добавляется в раздел use_router кода application.

Когда я отправляю запрос с заголовком Content-Type:application/json, ответ «404 not found». Но если я удаляю plug acceptJson из определения конвейера api, я получаю правильный ответ.

Как заставить Сатурн работать с plug acceptJson?

1 Ответ

1 голос
/ 21 февраля 2020

Я подозреваю, что 3615 прав - это похоже на проблему, которую я только что решил вчера после того, как бился головой о стену в течение недели. Запрос на мое приложение (просто прямое приложение от "dotnew new Saturn") из моего браузера было принято. Но запрос на тот же URL из тестового метода вернул 404. Он сводился к тому, что в тестовом запросе отсутствовал заголовок «Принять». Когда я добавил «Принять текст / html», это сработало. Из этого я сделал вывод, что если приложение не может найти тип контента, который будет принят в соответствии с запросом, оно сообщит 404. Ваша ситуация такая же - вы пытаетесь вернуть Json, но в запросе не было «Принять приложение / json», поэтому он не может найти ни одной страницы, которую бы принял запрос.

Конечно, я могу ошибаться.

...