当前位置: 首页 > news >正文

(六)WebAPI方法的调用

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.lryc.cn/news/441690.html

相关文章:

  • 运维工程师面试整理-故障排查常见故障的排查步骤及方法
  • OpenAI o1解决了「Quiet-STaR」的挑战吗?
  • PDF产品册营销推广利器FLBOOK
  • 华为OD机试 - 字符串划分(Python/JS/C/C++ 2024 E卷 100分)
  • nginx和php-fpm连接超时的相关配置以及Nginx中的try_files以及root、alias的使用
  • 在MAC中Ollama开放其他电脑访问
  • NE555芯片制作的节拍器
  • 如何使用 Next.js 进行服务端渲染(Server-Side Rendering, SSR)
  • 【machine learning-八-可视化loss funciton】
  • Android 将EasyPermissions进一步封装,使得动态权限申请更加简明
  • 我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆
  • MySQL5.7.42高可用MHA搭建及故障切换演示
  • 快速搭建最简单的前端项目vue+View UI Plus
  • 倍增练习(1)
  • MATLAB 在数学建模中的深入应用:从基础到高级实践
  • Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】
  • [数据集][目标检测]智慧交通铁路异物入侵检测数据集VOC+YOLO格式802张7类别
  • 飞驰云联FTP替代方案:安全高效文件传输的新选择
  • Hive内置集合函数-size,map_keys,map_values,sort_array,array_contains
  • Exchange Online 计划 2 部署方案
  • 图数据库的力量:深入理解与应用 Neo4j
  • Deutsch intensiv C1 Schreiben
  • 大数据新视界 --大数据大厂之DevOps与大数据:加速数据驱动的业务发展
  • 实战OpenCV之图像阈值处理
  • 登录后继续执行方法
  • JVM-类加载器的双亲委派模型详解
  • 【计算机基础题目】Linux系统中文件权限 字母权限和数字权限的相互转换
  • VRRP协议原理
  • Dockerfile自定义制作镜像,其中10个指令的作用分析
  • Linux6-vi/vim