0

我有一个非常简单的问题,我无法解决。

我有一个这样定义的 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 在名称末尾添加不必要的 @ 符号?我该如何摆脱它们?

谢谢。

4

1 回答 1

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

愚蠢的错误。:)

于 2013-05-08T12:39:51.540 回答