无法识别的Web Api路由方案?

时间:2014-10-03 12:44:21

标签: asp.net asp.net-web-api

我已经看到here

通过ajax发布数据:

$.ajax({
 url: 'api/product',  
 type: 'POST',
 contentType: 'application/json; charset=utf-8',
 data: MyProduct,
 dataType: "json",...

控制器:

public class ProductController : ApiController
{
 static readonly IProductRepository repository = new ProductRepository();
 public Product PostProduct(Product item)
 {
  ...
 }
} 

问题:

1)查看PostProduct(Product item)是否有[HttpVerb]Arg(Arg item)的约定? 我的意思是 - 使用了here的哪个约定?

2)查看PostProduct(Product item)我怎么知道从客户端数据中成功填充了item? (如果缺少字段会怎么样?)

1 个答案:

答案 0 :(得分:1)

IF 我理解你的问题:

  1. [HttpVerb] Arg的任何惯例(Arg项目)PostProduct(Product item)

  2.   

    HTTP方法。框架仅选择与请求的HTTP方法匹配的操作,确定如下:

         
        
    1. 您可以使用以下属性指定HTTP方法:AcceptVerbs,HttpDelete,HttpGet,HttpHead,HttpOptions,HttpPatch,HttpPost或HttpPut。
    2.   
    3. 否则,如果控制器方法的名称以" Get"," Post"," Put",&##开头34;删除"," Head","选项"或" Patch"然后按照惯例,该操作支持该HTTP方法。
    4.   
    5. 如果以上都不是,则该方法支持POST。
    6.   
    1. 我怎么知道该项已成功填充客户端数据? (如果缺少字段会怎样?)

    2. 直接表示链接:

      using System.ComponentModel.DataAnnotations;
      
       public class Product
      {
          public int Id { get; set; }
      
          [Required]
          public string Name { get; set; }
      
          public decimal Price { get; set; }
      
          [Range(0, 999)]
          public double Weight { get; set; }
      }
      

      Web API控制器

      public class ProductController : ApiController
      {
          public HttpResponseMessage PostProduct(Product product)
          {
              if (ModelState.IsValid)
              {
                  // Do something with the product (not shown).
      
                  return new HttpResponseMessage(HttpStatusCode.OK);
              }
              else
              {
                  return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
              }
          }
      }
      

      客户方:

      //this will fail Model validation because it's missing required "name"
      var _data = { "weight": 1, "price": 9.99 };
      
      
       $.post("api/product", _data, function (d) {
                  ....
      
       });
      
      - 如果我离开,请道歉......