2013-02-02 53 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的主要優勢之一。它使得以各種格式讀取和公開數據變得非常簡單,而無需重新編寫業務邏輯。