我正在创建一个带有 RESTful API 的 ASP.net MVC 网站到 SQL 数据库。我已经实现了一个包含 HTTP 命令的 Controller 。
其中一个命令是 POST
命令:
// POST: api/PoolTests
[ResponseType(typeof(PoolTest))]
public IHttpActionResult PostPoolTest(PoolTest poolTest)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.PoolTests.Add(poolTest);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = poolTest.Id }, poolTest);
}
我正在使用 Fiddler 来测试该功能,但我得到了一些奇怪的结果。根据自动生成的 API 文档,请求格式应该是具有这种结构的 JSON(这些是连接 SQL 数据库的字段):
{
"Id": 1,
"SiteID": "sample string 2",
"Date": "sample string 3",
"Tub": "sample string 4",
"par1": 5.1,
"par2": 6.1,
"par3": 7.1,
"par4": 8.1
}
在 fiddler composer 中,我选择 POST
和 http://localhost:53660/api/PoolTests
以及 JSON 负载 {"Id": 1, “SiteID”:“样本字符串 2”,“日期”:“样本字符串 3”,“Tub”:“样本字符串 4”,“par1”:5.1,“par2”:6.1,“par3”:7.1,“par4” ": 8.1}
这会导致 HTTP 400 错误代码。
如果我发送没有 JSON(有效负载)的相同请求,那么它会在 db.PoolTests.Add(poolTest);
行中断,因为有效负载为空。
如果我在 if (!ModelState.IsValid)
行放置一个断点,则使用 payload 永远不会到达断点。几乎就像负载一样,实际的 HTTP 命令没有被识别。
任何想法 - 我很感激可能缺少一些细节。
添加:PoolTest 类
public class PoolTest
{
public int Id { get; set; }
public string SiteID { get; set; }
public string Date { get; set; }
public string Tub { get; set; }
public double par1 { get; set; }
public double par2 { get; set; }
public double par3 { get; set; }
public double par4 { get; set; }
}
添加了 FIDDLER 屏幕截图:
我已经添加了 content-type
,现在我遇到了断点,但是 Pooltest
被报告为 null
最佳答案
您需要将数据
移动到请求正文中。在 Fiddler 中,它将是一个单独的输入框(在屏幕截图的下方)。
POST http://localhost:53660/api/pooltests
的 header 变为:
User-Agent: Fiddler
Host: localhost:53660
Content-Type: application/json
Content-Length: 140
header Content-Type
应该是 application/json 并且 Content-Length
将为您计算。您定义的 header data
不正确。
在Request Body中,您可以粘贴您的数据
{"Id": 1,"SiteID": "sample string 2", "Date": "sample string 3","Tub": "sample string 4","par1": 5.1, "par2": 6.1,"par3": 7.1,"par4": 8.1}
您可以不理会您的 Action 签名,但是当您想向 URL 添加参数时,[FromBody]
会很有帮助。
[ResponseType(typeof(PoolTest))]
public IHttpActionResult PostPoolTest([FromBody] PoolTest poolTest)
{
...
}
使用 jQuery 的 AJAX 请求看起来像这样:
$.ajax({
url: "http://localhost:53660/api/pooltests",
method: "POST",
data: { "Id": 1, "SiteID": "sample string 2", "Date": "sample string 3", "Tub": "sample string 4",
"par1": 5.1, "par2": 6.1, "par3": 7.1, "par4": 8.1 }
})
.done(function(result) {
console.log("success", result);
})
.fail(function(xhr, txtStatus) {
console.log("error", txtStatus);
});
关于有效负载的 ASP.net MVC HTTP 请求错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872538/