gpt4 book ai didi

有效负载的 ASP.net MVC HTTP 请求错误

转载 作者:可可西里 更新时间:2023-11-01 17:08:19 25 4
gpt4 key购买 nike

我正在创建一个带有 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 中,我选择 POSThttp://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

enter image description here

最佳答案

您需要将数据 移动到请求正文中。在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com