我有一个非常简单的问题,我无法解决。
我有一个像这样定义的Action方法:
[HttpPut]
public ActionResult Register(ClientRegistrationInformation clientInformation)
{ ... }
ClientRegistrationInformation在F#中定义如下:
type ClientRegistrationInformation () =
member val ClientKey = Guid.Empty with get, set
member val ValidationToken = String.Empty with get, set
我想使用System.Net.Http.HttpClient调用此操作方法。当我尝试这个时:
httpClient.PutAsJsonAsync (RegisterUrl, clientInformation)
JSON内容是这样发送的,不起作用:
"{\"ClientKey@\":\"8cb33ed5-ef49-4c40-afbe-78f0c198448e\",\"ValidationToken@\":\"token\"}"
当我使用jQuery.ajax尝试相同的内容时,内容会像这样发送,它可以工作:
"{\"ClientKey\":\"8cb33ed5-ef49-4c40-afbe-78f0c198448e\",\"ValidationToken\":\"token\"}"
为什么HttpClient会在名称的末尾添加不必要的@符号? 我如何摆脱它们?
感谢。
答案 0 :(得分:0)
好的。我发现了这个问题。我很蠢。
事实证明,F#的自动属性是以序列化程序选择支持字段的方式实现的,该字段与属性相同,但最后添加了@。
通过更改ClientRegistrationInformation的声明,问题就消失了:
type ClientRegistrationInformation () =
let mutable clientKey = Guid.Empty
let mutable validationToken = String.Empty
member this.ClientKey
with get () = clientKey
and set v = clientKey <- v
member this.ValidationToken
with get () = validationToken
and set v = validationToken <- v
愚蠢的错误。 :)