我正在爲我的ASP.NET應用程序編寫一個其他開發人員將使用的API。 API基本上會以名字,姓氏和ID返回人員列表。有許多方法可以在ASP.NET中編寫Web服務,最簡單的方法是創建一個返回DataTable的Web服務函數(asmx)。對於其他.NET開發人員來說,這很簡單,但我不相信這是編寫Web服務以實現一般平臺和語言獨立性的最佳方式。寫一個Asp.Net Web服務的最佳方式在野外很好玩
目前接受的標準是什麼編寫這樣的Web服務,今天在野外玩的很好?
我正在爲我的ASP.NET應用程序編寫一個其他開發人員將使用的API。 API基本上會以名字,姓氏和ID返回人員列表。有許多方法可以在ASP.NET中編寫Web服務,最簡單的方法是創建一個返回DataTable的Web服務函數(asmx)。對於其他.NET開發人員來說,這很簡單,但我不相信這是編寫Web服務以實現一般平臺和語言獨立性的最佳方式。寫一個Asp.Net Web服務的最佳方式在野外很好玩
目前接受的標準是什麼編寫這樣的Web服務,今天在野外玩的很好?
浮現在腦海從經驗中的一些想法:
List<Person>
而不是DataTable
。基本類型更容易序列化,並且在其他編程環境中更具意義,因爲您希望您的服務獨立於語言。getBlah()
,updateBlah(obj newObj)
,deleteBlah(obj objToDelete)
等。Person
類具有30個屬性,並且只有5個與最終用戶相關,請提供一個在Person
和PersonSimple
類之間進行接口的類,該類已公開。沒有這一層,每當你改變你的數據結構時,你的最終用戶將不得不修改你的代碼,並且你將被這種緊密耦合所鎖定。如果安全是非常重要的
我目前正在處理類似的問題:.NET中的web api服務接收數據表作爲輸入參數,對它們應用一些操作(使用表值函數),並返回一些輸出數據表。
就你而言,你不需要使用像DataTable這樣的複雜類;你可以使用一個簡單類的數組(列表<>),其中包含名字,姓氏和ID等字段。使用ASP.NET的Web API,您可以執行以下操作:
1)在Visual Studio中創建一個新的WebApi項目:例如(在VS 2012中)C#> Web> ASP。NET MVC 4 Web應用程序>選擇 「WEP API」 作爲項目模板
你會看到有很多文件夾的VS項目,其中包括一個名爲模型
如需幫助請參見:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api
2)與像一個類中創建一個新的模型代碼文件Person.cs如下:
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string[] Friends { get; set; }
}
3)建立電子新控制器代碼文件PersonController.cs用於獲取,插入和更新數據庫記錄的方法。所有必需的序列化/反序列化(JSON和XML)和數據綁定都是由項目模板設置的Web Api環境自動完成的。
// Get all the records of persons
public IList<Person> Get()
{
// read database into a list of persons (List<Person>)
// return List<Person>
}
一個選擇的人的返回記錄:
public Person Get(int id)
{
// read database for a selected person
}
參數結合(讀取由HTTP POST發送到的對象的JSON/XML內容,或者到一個列表中的對象)也自動進行,如容易如下:
// parameter binding: Create a Person object with content from XML/JSON
public void ReadPerson(Person p)
{
Trace.WriteLine(Person.Id);
}
public void ReadPersonList(List<Person> plist)
{
Trace.WriteLine(plist.Count);
}
很好的答案,但你能根據你的經驗提供一些關於你的想法的原因的細節? – 2011-05-12 15:38:48
@Gorge:我已經用一些解釋更新了我的帖子。希望這可以幫助! – mellamokb 2011-05-12 15:47:44