我已经看到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
? (如果缺少字段会怎么样?)
答案 0 :(得分:1)
IF 我理解你的问题:
[HttpVerb] Arg的任何惯例(Arg项目)PostProduct(Product item)
HTTP方法。框架仅选择与请求的HTTP方法匹配的操作,确定如下:
- 您可以使用以下属性指定HTTP方法:AcceptVerbs,HttpDelete,HttpGet,HttpHead,HttpOptions,HttpPatch,HttpPost或HttpPut。
- 否则,如果控制器方法的名称以" Get"," Post"," Put",&##开头34;删除"," Head","选项"或" Patch"然后按照惯例,该操作支持该HTTP方法。
- 如果以上都不是,则该方法支持POST。
醇>
我怎么知道该项已成功填充客户端数据? (如果缺少字段会怎样?)
直接表示链接:
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) {
....
});