当参数直接定义为方法参数而不是模型时,IHttpActionResult结果无法绑定请求体参数

时间:2018-02-02 13:38:49

标签: c# http asp.net-web-api model-binding actionresult

当我将一个Guids数组作为参数直接放在我的web api动作结果中时,它找不到我在请求体中的任何guid并绑定它们,例如。

[HttpPost]
public IHttpActionResult AddStores([FromBody]Guid[] Ids)
{
   ...            
}

ids作为null传入,尽管我在请求体中包含了id作为guid数组。

只有当我在模型中放入ID时,模型绑定器才会在请求主体中找到我的ID。

e.g。

public class AddStoresRequest
{
    public Guid[] Ids { get; set; }
}


[HttpPost]
public IHttpActionResult AddStoreUser(AddStoresRequest request)
{
     ...            
}

在这种情况下,它确实找到了ID。为什么会出现这种异常现象?当我在方法参数中直接使用Ids作为参数时,为什么模型绑定器会失败?

我在构建请求时没有使用该模型...我只是在请求体中放入了一个名为Ids的数组。

1 个答案:

答案 0 :(得分:3)

默认情况下,当Guid [] Ids被添加到请求时你的json序列化器将它映射到这样的东西:

{
   "Ids":["58b84557-1899-4354-b5ac-1d97c2b95e1b", "db7106d7-ba8a-44cc-b34d-90bec9b2ca3f"]
}

这就是为什么你必须使用第二次动作实现。

如果你想使用第一次实现你必须在body中发送这样的东西:

["58b84557-1899-4354-b5ac-1d97c2b95e1b", "db7106d7-ba8a-44cc-b34d-90bec9b2ca3f"]

您必须使用自定义序列化或JArray来实现此目的。