ASP.NET Web API 2 - 如何POST?

ASP.NET Web API 2 - how to POST?

我在 ASP.NET.

中使用脚手架为 Web API 2 生成了控制器 class

我想 post 来自浏览器的对象。这是生成的方法 运行:

    // POST: api/MyObjects
    [ResponseType(typeof(MyObject))]
    public async Task<IHttpActionResult> PostMyObject(MyObject myObject)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.MyObjects.Add(myObject);

        try
        {
            await db.SaveChangesAsync();
        }
        catch (DbUpdateException)
        {
            if (MyObjectExists(myObject.Id))
            {
                return Conflict();
            }
            else
            {
                throw;
            }
        }

        return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject);
    }

我正在尝试从 javascript/jquery:

调用它
$.post("http://localhost:2239/api/UrlVisits/5", "=" + "something");

我的问题是,我要为 "something" 输入什么才能正确序列化它?输入方法时,myObject是一个有效对象,所有字段都设置为空。我不知道这个序列化发生在堆栈的哪个位置,所以我不确定如何修改我的 post 来修复它。

您需要稍微更改一下结构。

首先,/5 表示 ID 为 5,这对于您的方法期望的复合对象没有意义。

其次,您不需要使用“=”手动指定任何 URL 参数化。如果您正确构建对象,jQuery 和 WebAPI 都会为您处理这些部分。在反序列化复杂对象方面,WebAPI 2 比它的前身强大得多。只需 post 对象。

$.post("http://localhost:2239/api/UrlVisits", {id:1, name:"test name"});

最后,您可以使用 [FromBody] 属性指定您的对象将 post 显示在表单主体上。

[ResponseType(typeof(MyObject))]
public async Task<IHttpActionResult> PostMyObject([FromBody]MyObject myObject)