在考虑如何为客户实现Web服务以编程方式调用我们的服务时,我已经查看了Microsoft Web API框架,它看起来很棒,但这是最好,最灵活的框架吗?
例如,我想让客户调用这样的RESTful方法:
/ API /产品/创建
尽可能灵活,允许客户通过几种不同的方法调用它
HTTP GET:
/api/products/create?name=widget&price=1.99
HTTP POST:
/api/products/create
name=widget&price=1.99
JSON via POST:
/api/products/create
{ "name": "widget", "price": 1.99 }
XML via POST:
/api/products/create
<product><name>widget</name><price>1.99</price></product>
以及其他任何有意义的事情。在一天结束时,我不在乎他们如何调用它,因为我只需要输入来执行操作,我想允许客户通过他们喜欢的任何方法调用它,并且对他们来说最简单,然后我可以回复如果它们通过Accept请求标头指定,则采用相同的格式或特定格式。
Web API框架可以处理这个问题,还是有其他一些工作方式的路由框架,以便我可以使用我可以发送到ProductsRepository的Product模型调用我的控制器?
答案 0 :(得分:3)
Web API绝对可以处理:)
这是你如何做到的。设置此路线:
config.Routes.MapHttpRoute("WebAPI", "api/{controller}/{action}");
并像这样创建你的模型和控制器:
public class ProductsController : ApiController
{
[HttpGet]
public void Create(string name, decimal price)
{
Create(new Product() { Name = name, Price = price });
}
[HttpPost]
public void Create(Product product)
{
// Create product
}
}
[DataContract(Name = "product", Namespace = "")]
public class Product
{
[DataMember(Name="name")]
public string Name { get; set; }
[DataMember(Name="price")]
public decimal Price { get; set; }
}
上面列出的所有内容都应该适用于此。第一个操作将处理GET,只要请求具有正确的Content-Type标头,您显示的所有三种不同的POST格式都应该与第二个操作一起正常工作。
Web API默认带有格式化程序,用于反序列化XML,JSON和表单URL编码数据,但您也可以注册自己的自定义格式化程序以支持更多格式。如果您需要更多相关信息,可以在此处找到:
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters
您已经掌握了使用Web API的主要优势之一。它使得以各种格式读取和公开数据非常容易,而无需重新编写业务逻辑。