【问题标题】:Passing JSON Data to WebApi not modifying the database将 JSON 数据传递给 WebApi 而不修改数据库
【发布时间】:2018-02-01 16:03:19
【问题描述】:

我通过 j 查询调用传递数据,我在数据库上有一个自动递增的键,即 ID,所以我在脚本上创建了一个变量来模仿它。

webApi 上的方法显示请求成功,但是当我在其上运行断点时,运行数据库更改的代码没有受到影响。

我不知道这是 Jquery 还是 MVC 相关的,所以我要标记两者。

证明post web api的请求被命中,http://imgur.com/a/TZSA4

WebApi 路由:

config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute (
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

脚本:

<script >
    var id = 29;
    function populateTab() {

    }

    var addvisible = document.getElementById("btnshowadd");
    $("#addpostform").hide();
    addvisible.onclick = function () { $("#addpostform").show() };
    $("#hideadd").click(function () {

        var postObject = {
            ID: id,
            Title: $("#PostTitle").val(),
            Body: $("#PostBody").val(),
            Image: $("#PostImage").val(),
            DateTime: Date.now()
        };


        jQuery.ajax({
            type: "POST",
            data: JSON.stringify(postObject),
            url: "../api/posts",
            contentType: "application/json"

        });
    id++;
});

WebApi 帖子:

[ResponseType(typeof(Post))]
[HttpPost]
[Route("api/Posts")]
public IHttpActionResult PostPost(Post post)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    db.Posts.Add(post);
    db.SaveChanges();
    return CreatedAtRoute("DefaultApi", new { id = post.ID }, post);
}

【问题讨论】:

  • 你试过逐行检查你的api吗?您的帖子参数是否具有完整的值?
  • @Redan 是的,当对象被传递时,它会被更正,唯一的强制性值是 id
  • @TahaMouhtij 这是一个路由问题。如果它没有触发操作,那么您发布到的 URL 与为 API 配置的路由不匹配。提供可用于重现问题的minimal reproducible example。目前没有提供足够的信息。
  • @Nkosi 我如何提供信息,我应该复制这两个文件吗?或者分享我的github?
  • @TahaMouhtij 您是否阅读了我上一条评论中包含的链接?从 web api 配置路由和控制器开始。您还想确认客户端正在调用正确的 URL

标签: jquery asp.net json asp.net-web-api


【解决方案1】:

您可以尝试以下方法: 不要为 id 传递任何值,让该值为 null。

既然你提到它是一个自动递增的 ID,数据库应该处理 ID 创建部分。

如果成功了,请告诉我。

也可以试试(伪代码,请勿复制粘贴),

结果 = db.savechanges();

如果(结果 > 1){

//重定向代码

}其他{

//重试逻辑什么的

}

在结果中设置一个断点,看看智能感知是否为您提供有关错误的更多信息

【讨论】:

  • 感谢您的帮助:)
【解决方案2】:

我遇到的主要问题是遵循 Jeylani 的回答后的日期,我发现不应该指定 ID,因为它是自动递增的,并且对于我需要使用 new Date() 的日期.toLocaleString() 而不是 date.now();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多