(六)WebAPI方法的调用

server/2024/11/15 7:04:16/
1.WebAPI中定义的GET、POST方法
        [HttpGet(Name = "GetWeatherForecast")]public IEnumerable<WeatherForecast> Get(){return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = Random.Shared.Next(-20, 55),Summary = Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();}[HttpPost]public string Post([FromBody] WeatherForecast message, [FromQuery] string param){//定义json格式返回结果var result = new { code = 0, city = param, data = message };return JsonConvert.SerializeObject(result);//return JsonSerializer.Serialize(result);}
2. WebAPI方法的调用

创建一个控制台应用程序,分别发送GET、POST请求。

// See https://aka.ms/new-console-template for more informationusing System;
using System.Text;
using System.Text.Json;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net;internal class Program
{private static async Task Main(string[] args){//GET请求string url2 = $"http://localhost:5003/api/WeatherForecast/get";httpResponse(url2, "", "GET");//POST请求string param = "北京";string url = $"http://localhost:5003/api/WeatherForecast/post?param={Uri.EscapeDataString(param)}";var weather = new{Date = "2024-09-14T16:41:37.2488358+08:00",TemperatureC = 18,Summary = "温暖"};string content = JsonSerializer.Serialize(weather);httpResponse(url, content, "POST");Console.ReadLine();}private static async void httpResponse(string url, string message,string type = ""){//调用CoreWebAPI项目中的Post方法using (var client = new HttpClient()){var content = new StringContent(message, Encoding.UTF8, "application/json");Console.WriteLine("Sending request...");Console.WriteLine($"URL: {url}\r\n ");// 发送请求  var response = new HttpResponseMessage();if (type.ToUpper() == "POST") {response = await client.PostAsync(url, content);}else if (type.ToUpper() == "GET"){response = await client.GetAsync(url);}// 读取响应内容  if (response.IsSuccessStatusCode){string responseBody = await response.Content.ReadAsStringAsync();Console.WriteLine("Request succeeded:");Console.WriteLine(responseBody);}else{Console.WriteLine("Request failed:");Console.WriteLine($"Status Code: {response.StatusCode}");string responseBody = await response.Content.ReadAsStringAsync();Console.WriteLine($"Response Body: {responseBody}");}}}
}
3.参数特性[FromBody]、[FromBody]

在ASP.NET Core Web API中,[FromBody][FromQuery]是两种常用的参数绑定特性(Attributes),它们分别用于控制参数值从HTTP请求的哪个部分获取。这对于编写清晰、易于理解的API接口非常重要。

1. [FromBody] 标记的参数

当使用[FromBody]特性时,参数值会从请求的Body部分读取。这通常用于处理JSON或XML格式的复杂数据类型。[FromBody]通常只能应用于一个参数,因为HTTP请求的Body通常只包含一次性的数据块,ASP.NET Core会尝试将整个Body反序列化为指定的类型。

如何传参

  • 客户端请求:通常,你需要通过HTTP POST或PUT请求发送JSON或XML格式的数据到服务器的Body部分。

  • 示例

    假设你有一个API接口,期望接收一个用户对象作为参数。

  • [HttpPost]  
    public IActionResult CreateUser([FromBody] User user)  
    {  // 处理用户对象  
    }

    客户端发送的HTTP请求体(以JSON为例)可能如下:

  • {  "name": "John Doe",  "email": "johndoe@example.com"  
    }

    2. [FromQuery] 标记的参数

    [FromQuery]特性用于从请求的URL的查询字符串中获取参数值。这对于简单的键值对参数特别有用,如分页参数、搜索过滤器等。

    如何传参

  • 客户端请求:在请求的URL后面添加查询字符串,格式为?paramName=value

  • 示例

    假设你有一个API接口,需要分页获取用户列表,接口期望接收页码和每页显示条数作为参数。

  • [HttpGet]  
    public IActionResult GetUsers([FromQuery] int page = 1, [FromQuery] int pageSize = 10)  
    {  // 处理分页逻辑  
    }

    客户端请求的URL可能如下:

  • https://yourapi.com/api/users?page=2&pageSize=5

    注意事项

  1. 当你使用[FromBody]时,请确保请求的Content-Type头部被正确设置(如application/json),以便ASP.NET Core能够正确地解析请求体。
  2. 通常,一个请求只能有一个[FromBody]参数,因为HTTP请求的Body是流式的,一旦被读取就无法再次读取。
  3. [FromQuery]参数可以从URL的查询字符串中读取多个参数,非常适合处理简单的GET请求。
  4. 除了[FromBody][FromQuery],ASP.NET Core还提供了[FromRoute][FromForm]等特性,用于从路由参数、表单数据等位置获取参数值。

http://www.ppmy.cn/server/119757.html

相关文章

neo4j关系的创建删除 图的删除

关系的创建和删除 关系创建 CREATE (:Person {name:"jack"})-[:LOVE]->(:Person {name:"Rose"})已有这个关系时&#xff0c;merge不起效果 MERGE (:Person {name:"Jack" })-[:LOVE]->(:Person {name:"Rose"})关系兼顾节点和关…

【工具变量】科技金融试点城市DID数据集(2000-2023年)

时间跨度&#xff1a;2000-2023年数据范围&#xff1a;286个地级市包含指标&#xff1a; year city treat post DID&#xff08;treat*post&#xff09; 样例数据&#xff1a; 包含内容&#xff1a; 全部内容下载链接&#xff1a; 参考文献-pdf格式&#xff1a;https://…

深入理解Linux中的多路复用技术:select、poll与epoll

引言 在现代的网络编程中&#xff0c;处理多个并发连接的能力是服务器性能的关键。为了有效地管理这些连接&#xff0c;操作系统提供了不同的方法来实现高效的输入输出操作。本文将探讨Linux系统中三种主要的多路复用技术&#xff1a;select、poll以及epoll&#xff0c;并分析…

.NET内网实战:通过FSharp白名单执行命令

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏&#xff0c;主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧。 02基本介绍 本文内容部分节选自小报童《.NET 通过Fsharp执行命令绕过安全防护》我们会长期更新&#xff01; 03编码实现 Fsi.exe 是…

中台架构下的数据仓库与非结构化数据整合

在当今数字化转型的大潮中&#xff0c;企业面临着数据爆炸性增长的挑战&#xff0c;特别是非结构化数据的急剧增加&#xff0c;如何高效整合与管理这些数据成为了企业发展的关键议题。中台架构作为一种高效、灵活的企业级架构模式&#xff0c;为数据仓库与非结构化数据的整合提…

一堆让你眼界大开的实用工具网站——搜嗖工具箱

和图书 https://www.hetushu.com/ 一个好用的免费看小说网站。和图书是一个提供各种热门电子书,书籍,小说免费在线阅读的网站&#xff0c;涵盖网游、玄幻、穿越、科幻、仙侠、都市、武侠、历史、竞技、军事灵异等多个种类的小说。在这个网站看小说最大的感触简单干净&#xff…

58.【C语言】内存函数(memcpy函数)

目录 1.memcpy *简单使用 翻译: *模拟实现 注意事项: *例题 1.memcpy *简单使用 memcpy:memory copy cplusplus的介绍 点我跳转 翻译: 函数 memcpy void * memcpy ( void * destination, const void * source, size_t num ); 复制内存块 直接从source指向的位置复制num…