我已经确认我将下拉列表设置为发布且URL正确,因为该字符串会毫无错误地传递到我的Web API项目中。但是它会在第一个参数
之后切断字符串中的所有内容请求标题:
User-Agent: Fiddler
Host: localhost:52888
Content-Length: 35
Content-Type: application/x-www-form-urlencoded
请求正文:
=name=TestName&date=10/15/2014
在Web API项目中,传递的唯一部分是name=Test Name
我确信查询字符串的格式正确。我想知道是否有其他人可以指出我可能缺少的方向。
如果我删除请求正文前面的=,则不会收到任何内容
答案 0 :(得分:3)
像AddCourse([FromBody] string courseRequest)
这样的签名告诉WebAPI查找名为courseRequest
的POST参数。但是(当格式正确时)您的请求正文没有该参数 - 而是name
和date
。当您通过添加=
字符来错误格式化请求正文时,它显然会导致解析器确定name=test
是值。但是查询字符串的第二部分是在&
之后,显然是一个不同的参数。它无处可绑定该参数,因此它只会被删除。
这里至少有两种解决方案。一种方法是在查询字符串而不是请求正文中传递参数,并使用方法签名,如:AddCourse(string name, string date)
(注意已移除[FromBody]
)。
另一种方法是创建一个封装请求的模型对象,如
public class AddCourseModel{
public string Name {get;set;}
public string Date {get;set;}
}
并将其用作方法的参数:AddCourse([FromBody] AddCourseModel model)
。