Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Saturn API not responding to GET when using acceptJson

The F# Saturn web framework fails on retrieving a value for GET method when acceptJson is a part of pipeline.

Below a sample code that I run to reproduce the issue:

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 is then added in the use_router section of the application code.

When I'm sending the request with a header Content-Type:application/json the response is "404 not found". But if I remove plug acceptJson from the api pipeline definition I get a correct response.

How to make Saturn work with the plug acceptJson?

like image 863
PiotrWolkowski Avatar asked Mar 29 '26 21:03

PiotrWolkowski


1 Answers

I suspect 3615 is right - this seems similar to a problem I just solved yesterday after beating my head against the wall for a week. A request to my app (just a straight app from "dotnew new Saturn") from my browser was accepted. But a request to the same url from a test method returned a 404. It boiled down to the fact that the test request was missing an "Accept" header. When I added "Accept text/html", it worked. What I deduced from that is that, if the app can't find a content type that will be accepted according to the request, then it will report a 404. Your situation is the same - you're trying to return Json, but the request didn't include an "Accept application/json", so it can't find any page that the request would accept.

Of course, I could be wrong.

like image 178
Dave Hanna Avatar answered Apr 02 '26 14:04

Dave Hanna



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!