2013-02-02 29 views
1

在考虑如何为客户实现一个Web服务以编程方式调用我们的服务,并且我已经回顾了Microsoft Web API框架,它看起来不错,但是这是最好的,最灵活的框架吗?.NET最灵活的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?

回答

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的主要优势之一。它使得以各种格式读取和公开数据变得非常简单,而无需重新编写业务逻辑。