【问题标题】:The parameter on my post action for WebAPI is always null我对 WebAPI 的发布操作的参数始终为空
【发布时间】:2012-08-02 20:39:34
【问题描述】:

我有一个 F# WebAPI 项目,由于某种原因,Post 方法的参数始终设置为 null。

(名字都是匿名的)

这里是控制器:

type TestController() =
    inherit ApiController()
    member x.Get () =
        getValues ()

    member x.Post ([<FromBody>] values: Values) =
        storeValues values

记录Values是这样定义的:

type TypeA = {
    Id: string
    ....
    }

....

type Values = {
    AValues: list<TypeA>
    BValues: list<TypeB>
    CValues: list<TypeC>
    }

在我看来,我像这样对 API 进行 POST 调用:

        return $.ajax({
            type: "POST",
            url: url,
            data: JSON.stringify(params),
            contentType: "application/json",
            beforeSend: function (jqXHR) { jqXHR.setRequestHeader("X-HTTP-Method", type); }
        });

data 出现在哪里:

{
    "AValues":[{"Id":"blahblah", ....}],
    "BValues":[...],
    "CValues":[...]
}

我更新了 JS 以使 data 评估为:

{
    "Values":
    {
        "AValues":[{"Id":"blahblah", ....}],
        "BValues":[...],
        "CValues":[...]
    }
}

现在调试器抛出一个空引用异常并说 Requests 为空(断点在我的记录定义上)。

问题在于它确实命中了控制器中的 Post 方法,但 values 始终设置为 null。

【问题讨论】:

  • JSON.stringify(params) 产生什么?我的意思是您发送的 JSON 数据是什么?
  • 上面列出了。 { "AValues":[{"Id":"blahblah", ....}], "BValues":[...], "CValues":[...] }

标签: .net json f# asp.net-web-api


【解决方案1】:

我将这个问题转发给Ryan Riley,他希望同时使用 F# 和 Web API,他说如下:

您不能将记录与默认模型绑定器一起使用,即使您制作了 成员可变,因为记录没有默认构造函数。 F# 3.0 引入了一个 CLIMutableAttribute [1],它将允许记录 用这种方式。

[1]http://blogs.msdn.com/b/fsharpteam/archive/2012/07/19/more-about-fsharp-3.0-language-features.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多