2016-04-30 25 views
0

嘿,我在我的客户端REST应用程序更新数据有一个很大的麻烦。更新数据与Microsoft.AspNet.WebApi

我做了一个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方法。

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

+0

您能否包含代码来显示如何在您的服务中配置路由? I.E.对config.Routes.MapHttpRoute()的调用,假设您使用的是基于约定的路由而不是基于属性的路由。 –

+0

您的回复中还返回了哪些状态码?有什么异常吗? –

+0

它给了我一个错误响应405:方法不允许 – anduplats

回答

0

你不能在同一个方法中有两个不同的身体参数。

你需要做的是设置id参数来自URI和从体内Contact参数,就像这样:

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

顺便说一句,我想你在你的控制器有一个GET方法它看起来像这样:

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

你得到的错误来自于一个事实,该系统是不是真的叫你PUT方法而得到一个(系统无视我之所以EXPRES的Contact参数sed before):使用PUT谓词调用GET方法会导致405 Method Not Allowed异常。

+0

支持这个答案!!!。这解决了我的问题。非常感谢!:) – anduplats

+0

@anduplats标记这个答案是正确的,如果它帮助你:) –