在php中我有这个
[(ngModel)]="registerAccount.authorities" to
并且我得到了我的json对象,然后我尝试用Suave和Newtonsoft.Json做同样的事情
<?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对象,但我不知道如何在我的web部分中将其作为http响应传递,并且使用上面的代码我继续在我的let php <我的表达式中输入错误< / p>
答案 0 :(得分:4)
看起来你已经引入了一些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)
现在,如果需要,可以用Newtonsoft Json.NET或Chiron实现替换Json.toJson
调用(但希望不是两者的混合)。只要类型对齐,你应该没问题。
特别是对于Chiron,您错过了要序列化的类型上的ToJson
静态成员(这是您的教程提到的内容)。 Json.NET有一个通用的序列化函数,可以生成与记录模式相对应的json,因此开箱即可使用起来更容易一些,但如果需要,还需要更多工作来自定义输出。
答案 1 :(得分:3)
如果要使用JSON返回HTTP 200响应并在Suave中设置HTTP标头,则可以使用Writers.setHeader
函数:
Writers.setHeader "Access-Control-Allow-Credentials" "true" >=>
Writers.setHeader "Access-Control-Allow-Headers:Content-Type" "Accept" >=>
Writers.setHeader "Access-Control-Allow-Methods" "GET, POST, PUT, DELETE, OPTIONS" >=>
Writers.setHeader "Access-Control-Allow-Origin" "" >=>
Successful.OK (movies |> Json.serialize |> Json.format)
整个事情是一个构造WebPart
的表达式,然后您可以使用Suave提供的函数与其他Web部件组合。因此,如果您想在设置标题之前进行模式匹配,则可以使用以下内容:
let php = request (fun r ->
match r.queryParam "playerName" with
| Choice1Of2 name ->
Writers.setHeader "Access-Control-Allow-Credentials" "true" >=>
Writers.setHeader "Access-Control-Allow-Headers:Content-Type" "Accept" >=>
Writers.setHeader
"Access-Control-Allow-Methods" "GET, POST, PUT, DELETE, OPTIONS" >=>
Writers.setHeader "Access-Control-Allow-Origin" "" >=>
Successful.OK (movies |> Json.serialize |> Json.format)
| Choice2Of2 msg -> BAD_REQUEST msg)
在设置CORS标头时,this snippet might also help。