【问题标题】:What's the most flexible webservice API framework for .NET?.NET 最灵活的 Web 服务 API 框架是什么?
【发布时间】:2013-02-02 21:26:48
【问题描述】:

在考虑如何实现 Web 服务以供客户以编程方式调用我们的服务时,我查看了 Microsoft Web API 框架,它看起来很棒,但这是最好、最灵活的框架吗?

例如,我想让客户像这样调用 RESTful 方法:

/api/products/创建

尽可能灵活,允许客户通过多种不同的方法调用它

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 模型调用我的控制器?

【问题讨论】:

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


    【解决方案1】:

    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-03-23
      • 2011-01-04
      • 2010-09-16
      • 2016-10-30
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多