您的位置:

C# WebAPI详解

一、介绍

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生态系统中不可或缺的一部分。

C# WebAPI详解

2023-05-16
深入了解WebAPI Swagger

2023-05-19
java方法整理笔记(java总结)

2022-11-08
java客户端学习笔记(java开发笔记)

2022-11-14
印象笔记记录java学习(Java成长笔记)

2022-11-12
webapi解析json(webapi介绍)

本文目录一览: 1、在WebApi中返回一个JSON格式的数据,如何到客户端就变了 2、webapi读取json webapi读取json时,获取的数据为空(webhook) 3、怎么让webapi返

2023-12-08
发篇java复习笔记(java课程笔记)

2022-11-09
python基础学习整理笔记,Python课堂笔记

2022-11-21
webapijs编程(nodejs webapi)

本文目录一览: 1、如何用js获取鹰眼web api v2.0接口的message 2、请问html的js调用webapi接口? 3、vue.js 怎么调用webapi 4、js调用webapi如何传

2023-12-08
基础c语言笔记,C语言笔记

2023-01-06
java学习笔记(java初学笔记)

2022-11-14
一篇c语言笔记,c语言入门笔记

2022-12-02
为知笔记私有化部署

2023-05-21
webapi怎么返回json(webapi请求方式)

本文目录一览: 1、如何设置webapi返回json或jsonp 2、webapi 如何返回json字符串? 3、怎么让webapi返回json 如何设置webapi返回json或jsonp ing

2023-12-08
java包笔记,Java语言包

2022-11-18
webapi教程nodejs(webapi接口搭建)

本文目录一览: 1、现在webform处理ajax请求用一般处理程序ashx还是用后台去处理 2、如何使 WebAPI 自动生成漂亮又实用在线API文档 3、零基础如何学WEB前端 4、JS本身并不难

2023-12-08
c语言笔记讲解,c语言程序笔记

2022-11-23
python学习之笔记(python的笔记)

2022-11-10
我的python笔记06(Python)

2022-11-14
java笔记,大学java笔记

2022-11-28