无法触发在Giraffe中实施的Web请求

时间:2017-10-01 13:57:39

标签: http f# visual-studio-code postman

我正在努力触发用长颈鹿写的网络服务。

以下是代码:

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服务时,我收到以下消息:

enter image description here

以下是整个solution

更新

我只是在VS Code中观察到这个问题。

因此,我可以使用Visual Studio 2017(3)版本15.4

观察成功的Web请求和响应

这是展示VS2017与VS Code

之间差异的video

2 个答案:

答案 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端点进行邮差调用时,它似乎对我来说很好......

postman

您是否解决了您的问题?

答案 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
        }