Web API - 为什么我必须使用FormDataCollection?

时间:2013-08-15 02:36:24

标签: c# asp.net-web-api

我刚刚开始使用Web API,并且一般都喜欢它,但是发现用'application / x-www-form-urlencoded'从POST请求中读取数据是一件痛苦的事。我想看看是否有更好的方法来做到这一点。我的应用程序(x可编辑的表单)向我的控制器发出一个简单的HTTP POST请求,其中包含3个值:pk,name,value。

请求如下:

POST http://localhost/XXXX.Website/api/Category/Set HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 39
Accept: */*
Origin: http://localhost
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost/XXXX.Website/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: ...

name=myPropertyName&value=myTestValue&pk=1

我的ApiController中的我的Action方法是:

public HttpResponseMessage PostSet(FormDataCollection set) {}

我可以从FormDataCollection中读取表单值,但有人可以向我解释为什么我不能简单地写:

public HttpResponseMessage PostSet(string name, string value, id pk) {}

或将其映射到模型?

我认为Web API应该能够从表单值映射参数吗?

1 个答案:

答案 0 :(得分:6)

您需要使用FromBody属性修饰参数。但这只适用于一个参数。是的,我能感觉到你皱着眉头。这样的事情应该有效:

public HttpResponseMessage PostSet([FromBody] string name) {}

但是,好消息是您可以使用Model属性将表单参数绑定到[ModelBinder]

查看this post了解详情。