2016-01-27 97 views
0

我是新來的web api,我想要做jquery post請求 但我得到那個錯誤 消息「:」請求的資源不支持http方法 'POST' 我已經嘗試了許多sulotions但沒有工作對我來說消息:請求的資源不支持http方法'POST'

有我的代碼

控制器

public class ProductsController : ApiController 
    { 
     List<Product> products = new List<Product> 
     { 
      new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, 
      new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, 
      new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } 
     }; 

     [HttpGet] 
     public IEnumerable<Product> GetAllProducts() 
     { 
      return products; 
     } 

     [HttpGet] 
     public IHttpActionResult GetProduct(int id) 
     { 
      var product = products.FirstOrDefault((p) => p.Id == id); 
      if (product == null) 
      { 
       return NotFound(); 
      } 
      return Ok(product); 
     } 

     [HttpPost] 
     public IHttpActionResult AddProduct([FromBody] Product p) 
     { 
      var product = new Product(); 
      if (p.Name == null || p.Price <= 0) 
      { 
       return NotFound(); 
      } 
      product.Id = products.Last().Id +1; 
      product.Name = p.Name; 
      product.Price = p.Price; 
      products.Add(product); 
      return Ok(products); 
     } 
    } 

HTML和JS

<!DOCTYPE html> 
<html> 
<head> 
    <title>Product App</title> 
</head> 
<body> 

    <div> 
     <h2>All Products</h2> 
     <ul id="products" /> 
    </div> 
    <div> 
     <h2>Search by ID</h2> 
     <input type="text" id="prodId" size="5" /> 
     <input type="button" value="Search" onclick="find();" /> 
     <p id="product" /> 
    </div> 
    <div> 
     <h2>Add New Product</h2> 
     <input type="text" id="newProd" placeholder="product name" size="7" /> 
     <input type="text" id="newProdPrice" placeholder="product price" size="7" /> 
     <input type="button" value="Add" onclick="add();" /> 
    </div> 

    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script> 
    <script> 
    var uri = 'api/products'; 

    //works fine 
    $(document).ready(function() { 
     // Send an AJAX request 
     $.getJSON(uri) 
      .done(function (data) { 
      // On success, 'data' contains a list of products. 
      $.each(data, function (key, item) { 
       // Add a list item for the product. 
       $('<li>', { text: formatItem(item) }).appendTo($('#products')); 
      }); 
      }); 
    }); 

    function formatItem(item) { 
     return item.Name + ': $' + item.Price; 
    } 

    //works fine 
    function find() { 
     var id = $('#prodId').val(); 
     $.getJSON(uri + '/' + id) 
      .done(function (data) { 
      $('#product').text(formatItem(data)); 
      }) 
      .fail(function (jqXHR, textStatus, err) { 
      $('#product').text('Error: ' + err); 
      }); 
    } 

    function add() { 
     var _name = $('#newProd').val(); 
     var _price = $('#newProdPrice').val(); 
     var p = {name:_name, price:_price}; 
     $.ajax({ 
      type: 'POST', 
      url: uri, 
      data: JSON.stringify(p), 
      success: OnComplete, 
      contentType: "application/json" 
     }); 
    } 

    function OnComplete(data) { 
     $("#products").empty(); 
     $.each(data, function (key, item) { 
      // Add a list item for the product. 
      $('<li>', { text: formatItem(item) }).appendTo($('#products')); 
     }); 
    } 
    </script> 
</body> 
</html> 

和Web API

public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 

當我addProduct命令的httppost改變HTTPGET anxd的JSON請求得到它工作正常 但是當我用後做,我得到這個錯誤

我試過做的人從 仍然沒有工作

感謝幫手

+1

你叫正確的終點?該URL看起來應該是'api/products/addproduct'。 –

+0

我想我不 - 我怎麼做? – Erez

+0

@Erez,上面設置的'uri'變量具有不同的路徑('var uri ='api/products';')。我猜你應該在調用'getJSON(uri)'後添加方法名稱' –

回答

4

以及我發現剛剛那個崗位方法

[Route("api/products")] 
[HttpPost] 
public IHttpActionResult AddProduct([FromBody] Product p) 
{ 
    var product = new Product(); 
    if (p.Name == null || p.Price <= 0) 
    { 
      return NotFound(); 
    } 
    product.Id = products.Last().Id +1; 
    product.Name = p.Name; 
    product.Price = p.Price; 
    products.Add(product); 
    return Ok(products); 
} 

,修復了某些人的 前添加狂勝答案有其他答案,請張貼他們在這裏

相關問題