Saturn API не отвечает на GET при использовании acceptJson

Веб-фреймворк 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 не найден". Но если я удалюplug acceptJson из api определение трубопровода Я получаю правильный ответ.

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

1 ответ

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

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

Другие вопросы по тегам