为什么servicestack无法在json post请求上进行模型绑定?

时间:2012-07-26 21:54:48

标签: servicestack model-binding

$.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错误

3 个答案:

答案 0 :(得分:4)

ServiceStack 模型绑定JSON POST(以及任何支持的内容类型,包括x-www-form-urlencoded)。

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

  

此代码访问了RestServiceBase的OnPost方法.But模型绑定   没用。

您尚未显示您要尝试绑定的DTO。但是这个JSON

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

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

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

在Json对象和C#类上,属性名称必须完全相同吗?

他们必须匹配课程名称,但不区分大小写,请参阅上文。

  

PS:我已经将网址更改为“/ api / student / json / asynconeway”但希望如此   然后我得到404错误

这是错误的。如果您尝试使用automatic pre-defined route,则正确的网址为:

/api/json/asynconeway/student

假设您的请求DTO 被称为Student

答案 1 :(得分: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:另一种语法错误

        }
        }
    });

代码结尾。

答案 2 :(得分:0)

我必须添加

dataType:“application / json”属性为ajax请求!