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

标签 asp.net json asp.net-mvc http

我正在创建一个带有 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/

相关文章:

c# - 通过 asp.net C# 的 Twitter statusUpdate 没有出现

javascript - 无法删除文件,因为它正被另一个进程 ASP.NET Core MVC 使用

java - 如何使用 GSON 从 Primeface 应用程序下载 json 文件?

asp.net-mvc - MVC中的TextBoxFor如何限制为2位小数?

c# - 设置元 :resourcekey on page load

c++ - 可以使用 TFS Build 自动安装 Visual Studio 2012 C++ Redistributable 吗?

java - 将 PostgreSQL JSON 列映射到 Hibernate 实体属性

java - 调用 readValue 时出现 Json NullPointerException

c# - 使用 ajax 渲染局部 View

asp.net - 如何在ASP.NET MVC 2中为Html.EditorForModel()方法获取textarea