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

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/153046.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-13 06:08
下一篇 2024-11-13 06:08

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论