2015-07-21 122 views
1

我想我現有的Web API控制器基於常規路由改變屬性的路由,所以我改變了我的現有代碼如下:屬性路由使用Asp.Net MVC 5和相關的問題的Web API 2

[Route("api/Visitors")] 
public IQueryable<Visitor> GetVisitors() 
     { 
      return db.Visitors; 
     } 

和GET方法的偉大工程,但是當我申請相同的屬性爲POST方法一樣:

[Route("api/Visitors")] 
     [ResponseType(typeof(Visitor))] 
     public async Task<IHttpActionResult> PostVisitor(Visitor visitor) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      db.Visitors.Add(visitor); 
      await db.SaveChangesAsync(); 

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

它拋出以下異常:

An exception of type 'System.Net.Http.HttpRequestException' occurred in System.Net.Http.dll but was not handled in user code 

Additional information: Response status code does not indicate success: 500 (Internal Server Error). 

在該線以下的方法的resp.EnsureSuccessStatusCode();

public bool SaveVisitor(Visitor visitor) 
     { 
      HttpResponseMessage resp = client.PostAsJsonAsync<Visitor>("/api/Visitors", visitor).Result; 
      resp.EnsureSuccessStatusCode(); 
      if (resp.StatusCode == System.Net.HttpStatusCode.Created) 
       return true; 
      else 
       return false; 
     } 

client是在類層次的HttpClient一個實例。 我無法得到這個例外背後的原因。我在這裏錯過了什麼?如果我刪除屬性路由數據按預期保存/檢索。我指的是Attribute Routing

請幫忙。

回答

0

嘗試將[HttpPost]屬性添加到您的「發佈」端點。如下:

 [Route("api/Visitors")] 
     [HttpPost] 
     [ResponseType(typeof(Visitor))] 
     public async Task<IHttpActionResult> PostVisitor(Visitor visitor) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      db.Visitors.Add(visitor); 
      await db.SaveChangesAsync(); 

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

另一種可能性......從你的代碼看來,你的控制器類可能被稱爲「VisitorsController」。遊客是複數。

也許嘗試添加's'到您的發佈方法?

public async Task<IHttpActionResult> PostVisitors(Visitor visitor) 
+0

我已經嘗試了兩個選項,你建議,但無濟於事:( – sdeep