2
$.ajax({
        type: 'POST',
        url: "/api/student",  
        data:'{"x":3,"y":2}',
        dataType: "json",
        complete: function (r, s) {
            debugger;
        },

        success: function(response){
            debugger;
        },

        contentType: "application/json" // !!!!!!!!!!!! The reason of problem. I could see Json on firebug. It was false-positive for my code !

    });

我已经通过 Firebug 跟踪了流。Firebug 识别并显示 JSON 对象。

此代码访问了 RestServiceBase 的 OnPost 方法。但模型绑定不起作用。Json 对象和 C# 类的属性名称是否必须完全相同?

还是我错过了什么?(是的,你错过了一些东西!)

PS:我希望将 url 更改为“/api/student/json/asynconeway”,但后来出现 404 错误

4

3 回答 3

4

ServiceStack 确实模型绑定了 JSON POST(以及任何受支持的 Content-Types,包括 x-www-form-urlencoded)。

ServiceStack.Examples中有很多例子可以做到这一点。

此代码访问了 RestServiceBase 的 OnPost 方法。但模型绑定不起作用。

您还没有显示您要绑定的 DTO。但是这个 JSON

{"x":3,"y":2}

将映射到匹配的 DTO,例如:

public class Student { 
    public int X { get; set; }
    public int Y { get; set; }
}

Json 对象和 C# 类的属性名称是否必须完全相同?

当然,它们必须匹配名称,但不区分大小写,见上文。

PS:我希望将 url 更改为“/api/student/json/asynconeway”,但后来出现 404 错误

这是错误的。如果您尝试使用自动预定义路由,则正确的 url 是:

/api/json/asynconeway/student

假设您的Request DTO被调用Student

于 2012-07-26T22:43:11.797 回答
0

这是我的一些代码:

            $.ajax({
                type: "POST",
                url: "/artist/delete",
                data: { id: itemId },
                success: function () {
                    $("div#" + itemId).fadeOut(function () { $(this).remove(); });
                }
            });

编辑:对不起,我弄错了你想要的东西,所以我会问你一个问题,你为什么要将 json 发送到服务器,在那里你可以创建这样的函数:

[HttpPost]
        public ActionResult Delete(int id)
        {
            var artist = _db.Artists.Where(x => x.ID == id).SingleOrDefault();
            if (artist == null)
            {
                return Content("false");
            }
            else
            {
                _db.Artists.DeleteOnSubmit(artist);
                _db.SubmitChanges();
                return RedirectToAction("Post");
            }
        }

EDIT2:你在这里有语法错误data:'{"x":3,"y":2)}',
EDIT3:另一个语法错误

        }
        }
    });

在代码的末尾。

于 2012-07-26T22:00:27.217 回答
0

我必须添加

dataType: "application/json" 属性到 ajax 请求!

于 2012-07-26T23:27:45.643 回答