1

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

4

1 回答 1

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

于 2013-02-02T22:00:21.187 回答