2014-02-26 49 views
0

我正在使用asp.net web api 2,並且請求無法找到並運行IHttpActionResult方法。我相信他們是我的路由問題。我得到的錯誤(http 500)響應是:「嘗試創建類型控制器時發生錯誤確保控制器具有無參數公共構造函數。」如何解決有關路由的http錯誤500?

我發送請求爲:動詞:GET本地主機:XXXX/API/simpleproduct/getproduct ID = 3

[RoutePrefix("api/simpleproduct")] 
    public class SimpleProductController : ApiController 
    { 
     List<Product> products = new List<Product>() { new Product { Id = 1, Name = "Demo1", Price = 1 }, new Product { Id = 2, Name = "Demo2", Price = 2 }, new Product { Id = 3, Name = "Demo3", Price = 3 } }; 

     public SimpleProductController(List<Product> products) 
     { 
      this.products = products; 
     } 

     public IEnumerable<Product> GetAllProducts() 
     { 
      return products; 
     } 
     [Route("getproduct")] 
     [HttpGet] 
     public IHttpActionResult GetProduct(int id) 
     { 
      var product = products.FirstOrDefault((p) => p.Id == id); 
      if (product == null) 
      { 
       return NotFound(); 
      } 
      return Ok(product); 
     } 

     public IHttpActionResult AddProduct(int Id, string Name, decimal Price) 
     { 
      if (Id == 0 || Name == null || Price == 0) 
      { 
       return Conflict(); 
      } 

      products.Add(new Product { Id = Id, Name = Name, Price = Price }); 

      return Ok(products); 
     } 

     public IHttpActionResult DeleteProduct(int Id) 
     { 
      if (Id < 0) 
      { 
       return Conflict(); 
      } 

      var products2 = products.ToList(); 
      foreach (var product2 in products2) 
      { 
       if (product2.Id == Id) 
       { 
        products.Remove(product2); 
       } 
      } 

      return Ok(products); 
     } 
    } 
+3

您是否嘗試添加無參數構造函數? – PmanAce

+1

另外我不確定爲什麼你會通過控制器傳遞產品,你應該只傳遞依賴關係。 – PmanAce

+0

我試過了,但沒有奏效。你是否提到addproduct? – user3126215

回答

0

像@PmanAce已經在評論中提到的,你需要一個無參數的公共構造函數。

public SimpleProductController() 
{ 
} 

我假設你只是測試/試用Web API,這就是爲什麼你要將自己的產品硬編碼爲私有變量。在這種情況下,您根本不需要構造函數來獲取產品參數。

如果你是你的例子工作,你可能想嘗試注入一個存儲庫到你的控制器。它將檢索數據(映射到您的實體)的邏輯從控制器中分離出來。這裏有一篇關於Web API控制器的依賴注入的好文章,它利用存儲庫和Unity將它作爲依賴注入。奇怪的是,它足夠使用您使用的相同產品結構。

http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver

相關問題