php - 如何在 suave webpart 中设置 Json 响应

标签 php json http f# suave

我从 Suave 和 F# 开始。 我正在尝试在我的 Web 部件中传递一个 json 序列化对象以在我的响应中获取它。

在 php 中我有这个

<?php
header('Access-Control-Allow-Credentials:true');
header('Access-Control-Allow-Headers:Content-Type, Accept');
header('Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Origin:*');
?>
{
 "player1Key":"hdegftzj25",
 "gameKey":"aegfhzkfszl74852"
}

有了这个我得到了我的 json 对象,然后我尝试用 Suave 和 Newtonsoft.Json 做同样的事情

type gameCreate= {
    player1Key : string
    gameKey: string
}

let create= { player1Key = "BadBoys2"; gameKey = "zLUGgtrht4456" }

let json = Newtonsoft.Json.JsonConvert.SerializeObject(create)

//OK (acc |> Json.serialize |> Json.format )
let php =
request (fun r ->
    match r.queryParam "playerName" with
    | Choice1Of2 name ->  OK (movies |> Json.serialize(json) |> Json.format(json))
                        //|>  Response.response(Json.toJson(info))
                        //|>  OK
    | Choice2Of2 msg -> BAD_REQUEST msg)

let webPart = 
choose [
path "/" >=> (OK "Home")
path "/elm/api/create.php" >=> php
]

startWebServer defaultConfig webPart

所以我可以创建和序列化一个 json 对象,但我不知道如何将它作为 http 响应传递到我的 web 部件中,并且使用上面的代码我在 let php 中的表达式类型上不断出现错误

最佳答案

看起来你引入了太多的 Json 序列化库 - 你似乎混合了 Json.NET 和 Chiron(教程中使用的)的一些部分,但效果不佳......

让我们退一步。 Suave 带有它自己的 Json 序列化模块,所以你可以通过使用它来获得一些东西。这是它的样子:

let php =
    request (fun r ->
        match r.queryParam "playerName" with
        | Choice1Of2 name ->  
            let json : string = 
                create
                // this comes from Suave.Json, gives you a byte array
                |> Json.toJson           
                // converts the byte array into a string
                |> System.Text.Encoding.UTF8.GetString
            OK json
        | Choice2Of2 msg -> BAD_REQUEST msg)

现在,如果需要,您可以将 Json.toJson 调用替换为 Newtonsoft Json.NET 或 Chiron 实现(但希望不要混合使用两者)。只要类型对齐,就应该没问题。

特别是对于 Chiron,您在要序列化的类型上缺少 ToJson 静态成员(这是您的教程确实提到的内容)。 Json.NET 具有生成对应于记录模式的 json 的通用序列化函数,因此开箱即用更容易一些,但如果需要,还需要做更多工作来自定义输出。

关于php - 如何在 suave webpart 中设置 Json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42013940/

相关文章:

带回调的 PHP 异步 cURL

php - 如何使用 PHP SimpleTest 框架设置数据库测试

php - 从 Carbon 类对象获取元素

linux - 如何使用shell脚本将json对象添加到json文件

php - 在 URL 中显示文件扩展名的优点?

php - 根据浏览器视口(viewport),使用 javascript(无 jQuery)将 <div> 替换为 php 内容

Python - Json 列表到 Pandas Dataframe

python - 支持嵌套类型中自定义类的默认序列化

http - 'HTTP/1.1 200' 和 'HTTP/1.1 200 OK' 有什么区别

Angular 7 : Sending post request gives error 405 (Method not allowed)