2016-04-30 21 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標記這個答案是正確的,如果它幫助你:) –