使用Microsoft.AspNet.WebApi更新数据

时间:2016-04-30 16:23:29

标签: asp.net-web-api controller

嘿,我在客户端REST应用程序中更新数据时遇到了很大麻烦。

我制作了一个Web API控制器。

    // PUT: api/Contacts/5
    [ResponseType(typeof(void))]
    public IHttpActionResult PutContact(Contact contact, int id)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != contact.ContactId)
        {
            return BadRequest();
        }

        _contactService.Update(contact);

        return StatusCode(HttpStatusCode.NoContent);
    }

还有客户端服务方法:

    public async Task<T> PutData<T>(T data, int dataId)
    {
        HttpResponseMessage resp = await this._client.PutAsJsonAsync(_serviceUrl + "/" + dataId, data);
        resp.EnsureSuccessStatusCode();
        return await resp.Content.ReadAsAsync<T>();
    }

服务URL在调试模式下显示我转到端点: http://localhost:21855/api/Contacts/8

但是当我调试我的服务器控制器PutContact方法时,它甚至没有进入断点。

我做错了什么?我需要更新数据,但我不能,因为我的客户端应用程序甚至不会在调试模式下转到服务器断点! 它给我一个错误响应405:方法不允许

1 个答案:

答案 0 :(得分:0)

您可以在同一方法中使用两个不同的身体参数。

您需要做的是将id参数设置为来自URI和来自正文的Contact参数,如下所示:

public IHttpActionResult PutContact([FromBody]Contact contact, [FromUri]int id)
{
    // method code
}

BTW,我想你的控制器中有一个GET方法,如下所示:

public IHttpActionResult GetContact(int id)
{
    // method code
    return Contact; // pseudo-code
}

你得到的错误来自这样一个事实:系统并没有真正调用你的PUT方法而是GET方法(由于我之前表达的原因,系统忽略了Contact参数):调用GET方法PUT动词会导致405 Method Not Allowed异常。