我正在努力触发用长颈鹿写的网络服务。
以下是代码:
let webApp : HttpContext -> HttpHandlerResult =
choose [
GET >=>
choose [ routef "/platforms/" fetchPlatforms ]
fetchPlatforms实现如下:
let private fetchPlatforms () (context : HttpContext) =
async { let response = getPlatforms()
return! json response context
}
我遇到的问题是,当我运行服务器代码然后尝试测试Web服务时,我收到以下消息:
以下是整个solution。
更新
我只是在VS Code中观察到这个问题。
因此,我可以使用Visual Studio 2017(3)版本15.4
观察成功的Web请求和响应这是展示VS2017与VS Code
之间差异的video答案 0 :(得分:3)
我下载了您的源代码并尝试重现该问题,但首先我在启动时遇到错误,因为我没有在本地配置您的数据库,因此我做了以下更改:
type TestObj =
{
Prop1 : string
Prop2 : int
}
let private fetchPlatforms =
let obj1 = { Prop1 = "test"; Prop2 = 100 }
json obj1
// let response = getPlatforms()
// json response
...当我现在启动应用程序并对/platforms
端点进行邮差调用时,它似乎对我来说很好......
您是否解决了您的问题?
答案 1 :(得分:2)
routef应匹配模式: https://github.com/dustinmoris/Giraffe#routef
否则尝试路线:
let webApp : HttpContext -> HttpHandlerResult =
choose [
GET >=>
choose [ route "/platforms" >=> fetchPlatforms ]
编辑:
在查看代码时, fetchPlatforms 函数不是正确的处理程序。 HttpHandler:
HttpHandler是一个简单的函数,它接受两个curried参数,一个HttpFunc和一个HttpContext,并在完成后返回一个HttpContext(包含在一个选项和Task工作流程中)。
而不是:
let private fetchPlatforms =
let response = getPlatforms()
json response
尝试类似的东西:
let fetchPlatforms =
fun (next : HttpFunc) (ctx : HttpContext) ->
let response = getPlatforms()
json response next ctx
你也可以做异步(它取决于 getPlatforms ):
let fetchPlatforms =
fun (next : HttpFunc) (ctx : HttpContext) ->
task {
let! response = getPlatforms()
return! json response next ctx
}