ASP.NET Web API 2 - 如何开机自检

ASP.NET Web API 2 - how to POST?

本文关键字:开机自检 NET Web API ASP      更新时间:2023-09-26

我已经使用基架为 Web API ASP.NET 2 生成了一个控制器类。

我想从浏览器发布一个对象。这是生成的运行方法:

    // 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 是所有字段都设置为 null 的有效对象。我不知道此序列化在堆栈中的哪个位置发生,因此我不确定如何修改我的post来修复它。

您需要稍微

更改一下结构。

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

其次,您无需使用"="手动指定任何 URL 参数化。 如果你正确地构建了对象,jQuery和WebAPI都会为你处理这些部分。WebAPI 2 在反序列化复杂对象方面比其前身强大得多。 只需发布对象即可。

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

最后,您可以使用 [FromBody] 属性指定对象将发布在表单正文上。

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