在手动编写请求时,在Web API请求正文中截断的查询字符串?

时间:2014-03-05 21:46:15

标签: asp.net-web-api fiddler

我已经确认我将下拉列表设置为发布且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

我确信查询字符串的格式正确。我想知道是否有其他人可以指出我可能缺少的方向。

如果我删除请求正文前面的=,则不会收到任何内容

1 个答案:

答案 0 :(得分:3)

AddCourse([FromBody] string courseRequest)这样的签名告诉WebAPI查找名为courseRequest的POST参数。但是(当格式正确时)您的请求正文没有该参数 - 而是namedate。当您通过添加=字符来错误格式化请求正文时,它显然会导致解析器确定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)

相关问题