3

acceptJson当 GET 方法是管道的一部分时,F# Saturn Web 框架在检索 GET 方法的值时失败。

下面是我运行以重现该问题的示例代码:

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 acceptJsonapi管道定义中删除,我会得到正确的响应。

如何使土星与plug acceptJson?

4

1 回答 1

1

我怀疑 3615 是对的——这似乎与我昨天在用头撞墙一周后刚刚解决的问题相似。我的浏览器对我的应用程序(只是来自“dotnew new Saturn”的直接应用程序)的请求被接受。但是从测试方法对相同 url 的请求返回了 404。归结为测试请求缺少“Accept”标头的事实。当我添加“接受文本/html”时,它起作用了。我从中推断的是,如果应用程序找不到将根据请求接受的内容类型,那么它将报告 404。你的情况是一样的 - 你试图返回 Json,但是请求不包含“接受应用程序/json”,因此它找不到任何请求可以接受的页面。

当然,我可能是错的。

于 2020-02-21T20:25:10.007 回答