一、介紹
WebAPI是一種用於構建HTTP服務的框架,支持多種格式的數據傳輸和HTTP請求類型。
使用C# WebAPI,開發人員可以快速創建RESTful Web服務,讓任何可以發送HTTP請求的設備與您的應用程序進行通信。
本文將深入探討C# WebAPI的各個方面,包括如何建立WebAPI、處理HTTP請求、使用內容協商、異常處理以及如何測試WebAPI等方面。
二、建立WebAPI
C# WebAPI可以使用Visual Studio輕鬆創建。可以選擇創建ASP.NET Web應用程序並選擇Web API模板。該模板提供許多常見任務的支持,如添加新的控制器、配置路由、添加模型綁定、處理請求等。
public class BooksController : ApiController
{
public IEnumerable Get()
{
return new List()
{
new Book() { Id = 1, Title = "Book1" },
new Book() { Id = 2, Title = "Book2" },
new Book() { Id = 3, Title = "Book3" }
};
}
}
在這個例子中,我們創建了一個名為「BooksController」的控制器,並且在該控制器中實現了「GET」方法。當我們訪問API的根路徑時,即「/api/books」時,我們將會得到一個包含三個書籍對象的JSON格式的響應。
三、處理HTTP請求
C# WebAPI支持HTTP請求類型,如POST、GET、PUT、DELETE 等。可以通過使用屬性或UriParameter(具有[FromUri]或[FromBody]屬性的參數)將請求中的數據綁定到C#對象上。
下面是一個使用POST方法向WebAPI提交請求的例子。
[HttpPost]
public IHttpActionResult Create([FromBody]Book book)
{
// 將書籍保存到資料庫
return Ok();
}
在這個例子中,我們使用HttpPost特性來標記Create方法,使其能夠響應POST請求。 我們還使用FromBody屬性將請求正文中的數據綁定到Book對象並保存到資料庫中。
四、使用內容協商
內容協商是C# WebAPI中優秀的特性之一,它可允許您根據客戶端能夠處理的數據格式來提供不同的響應。可以使用Accept Header來實現內容協商。
public IEnumerable Get()
{
var books = new List()
{
new Book() { Id = 1, Title = "Book1" },
new Book() { Id = 2, Title = "Book2" },
new Book() { Id = 3, Title = "Book3" }
};
if (Request.Headers.Accept.Any(x => x.MediaType.Contains("application/xml")))
{
var xmlBooks = new List();
books.ForEach(x => xmlBooks.Add(new BookXml() { Id = x.Id, Title = x.Title }));
return xmlBooks;
}
return books;
}
在這個例子中,我們檢查Accept Header是否包含「application/xml」媒體類型,如果包含則返回XML格式的響應。否則,我們返回JSON格式的響應。
五、異常處理
C# WebAPI提供了多種處理異常的方法。以下是一種使用HttpResponseException的簡單方法,用於返回HTTP錯誤代碼和自定義消息。
public IHttpActionResult Get(int id)
{
var book = _books.FirstOrDefault(x => x.Id == id);
if (book == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return Ok(book);
}
在這個例子中,如果找不到包含給定ID的書,則拋出HttpResponseException。該異常將返回HTTP 404錯誤代碼。
六、測試WebAPI
測試WebAPI可能是開發應用程序的最重要部分。WebAPI測試應該包括設置路由、模型綁定、請求消息構造和響應消息讀取。你可以使用Microsoft.AspNet.WebApi.Testing包來輕鬆測試你的WebAPI.
[TestClass]
public class BooksControllerTests
{
[TestMethod]
public void TestGetMethod()
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
HttpServer server = new HttpServer(config);
HttpClient client = new HttpClient(server);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync("http://localhost/api/Books").Result;
response.EnsureSuccessStatusCode();
string responseBody = response.Content.ReadAsStringAsync().Result;
Assert.AreEqual("[{\"Id\":1,\"Title\":\"Book1\"},{\"Id\":2,\"Title\":\"Book2\"},{\"Id\":3,\"Title\":\"Book3\"}]", responseBody);
}
}
在這個例子中,我們創建了一個名為BooksControllerTests的測試類。在該類中,我們使用能夠使用默認值的HttpConfiguration實例和HttpServer實例來設置路由。我們還設置了客戶端請求頭以驗證WebAPI是否正確返回JSON格式的響應。 最後,我們使用GetAsync方法向其發送HTTP GET請求,並驗證響應是否與我們預期的結果相等。
總結
在本文中,我們深入探討了C# WebAPI的多個方面。我們學習了如何創建WebAPI、處理HTTP請求、使用內容協商、異常處理以及如何測試WebAPI。WebAPI是開發WebService和Web應用程序的強大工具,它是.NET生態系統中不可或缺的一部分。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/153046.html
微信掃一掃
支付寶掃一掃