什么是最灵活的.NET Web服务API框架?

时间:2013-02-02 21:26:48

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

在考虑如何为客户实现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模型调用我的控制器?

1 个答案:

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