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

第6章 6.4 ASP.NET Core Web API各种技术及选择

 6.4.1 控制器父类用哪个

6.2小节和6.3小节所演示的ASP.NET Core Web API 的控制器类都继承自ControllerBase,而6.1中MVC的控制器继承自Controller,Controller又继承自ControllerBase。

所以,一般情况下,编写的WebAPI控制器类继承自ControllerBase即可,当然也可以不继承任何类,例如:

6.4.2 操作方法的异步、返回值、状态码

1. 异步及返回值

IActionResult返回值:

添加一个Hello控制器并编写操作方法,并且在返回404异常码时添加异常原因

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.Design.Serialization;namespace WebApplicationTest.Controllers
{[Route("api/[controller]")][ApiController]public class HelloController : ControllerBase{[HttpGet]public IActionResult GetOrder(int id){if (id==1){return Ok(100);}else if (id==2){return Ok(200);}else{return NotFound("id错误");}}}
}

启动调试

异常:

由于IActionResult不包含返回值的类型信息,Swagger无法从操作方法中获取返回数据的类型信息,所以ASP.Net Core中提供了一个泛型ActionResult<T>

ActionResult<T>作为返回值,新增操作方法:

 [HttpGet("{id}")]public ActionResult<Person> GetOrderFX(int id){if (id == 1){return new Person("枸杞泡茶", 18);}else if (id == 2){return new Person("牧羊人", 27);}else{return NotFound("id错误");}}

启动调试:

2. 异常响应码及统一响应体

一般在项目开发中,需要统一响应报文体的格式,以便客户端进行错误处理。例如此处声明一个ErrorInfo类表示错误详情:

namespace WebApplicationTest
{public record ErrorInfo(int ErrorCode ,string ?Message);
}

改造【GetOrderFX】方法:

 [HttpGet("{id}")]public ActionResult<Person> GetOrderFX(int id){if (id<=0){return BadRequest(new ErrorInfo(100, "id需为正数!"));}else if (id == 1){return new Person("枸杞泡茶", 18);}else if (id == 2){return new Person("牧羊人", 27);}else{return NotFound(new ErrorInfo(100,"人员不存在!"));}}

启动调试

6.4.3 操作方法的参数从哪里来

给服务端WebAPI传参时,有URL、QueryString,请求报文体,三种

1. 从URL获取

例如新增一个控制器

 [HttpGet("N1/{number1}/N2/{number2}")]public int  Add(int number1,int number2){return number1+number2;}

启动调试

2. QueryString

对于通过QueryString传递的参数,使用 [FromQuery]获取值

编写一个控制方法:

[HttpPost]
public int AddQueryString([FromQuery]int number1, [FromQuery] int number2)
{return number1 + number2;
}

启动调试:

调试结果查看,默认的方式其实就是QueryString方式,如果需要显式设置:

 [HttpPost]public int AddQueryString([FromQuery]int number1, [FromQuery] int number2){return number1 + number2;}
3. 请求报文体

新增一个操作

[HttpPost]
public string AddUser(Person ppp1)
{return "保存成功!"+ppp1.Name +",Age:"+ppp1 .Age;
}

启动调试

Json请求报文体

响应:

当然,这几种方式也可以混用:

[HttpPut("{Name}")]
public string AddUser1(string Name, Person ppp1)
{return "保存成功!" + ppp1.Name + ",Age:" + ppp1.Age+","+Name;
}

启动调试

响应

相关文章:

第6章 6.4 ASP.NET Core Web API各种技术及选择

6.4.1 控制器父类用哪个 6.2小节和6.3小节所演示的ASP.NET Core Web API 的控制器类都继承自ControllerBase&#xff0c;而6.1中MVC的控制器继承自Controller&#xff0c;Controller又继承自ControllerBase。 所以&#xff0c;一般情况下&#xff0c;编写的WebAPI控制器类继承…...

python导入模块的方式

在python开发中&#xff0c;巧用模块导入可简化开发&#xff0c;提高开发效率。下面简介下模块使用使用事项&#xff1a; 一、模块的使用&#xff1a; 模块 就好⽐是 ⼯具包&#xff0c;要想使⽤这个⼯具包中的⼯具&#xff0c;就需要 使用import导⼊ 这个模块每⼀个以扩展名…...

【Linux】Ubuntu Linux 系统——Node.js 开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天星期五了&#xff0c;同时也是2025年的情人节&#xff0c;今晚又是一个人的举个爪子&#xff01;&#xff01; &#x1f642; 本文是有关Linux 操作系统中 Node.js 开发环境基础知识&#xff0c;后续我将添加更多相关知识噢&a…...

使用pyCharm创建Django项目

使用pyCharm创建Django项目 1. 创建Django项目虚拟环境&#xff08;最新版版本的Django) 使用pyCharm的创建项目功能&#xff0c;选择Django,直接创建。 2. 创建Django项目虚拟环境&#xff08;安装特定版本&#xff09; 2.1创建一个基础的python项目 2.2 安装指定版本的D…...

【前端框架】深入Vue 3组件开发:构建高效灵活的前端应用

一、引言 Vue 3作为一款流行的前端框架&#xff0c;其组件化系统是构建大型应用的核心。通过将应用拆分为多个可复用的组件&#xff0c;不仅能提高代码的可维护性与复用性&#xff0c;还能让开发团队进行高效的协作。本文将深入探讨Vue 3组件开发的各个方面&#xff0c;帮助开…...

基于Python flask-sqlalchemy的SQLServer数据库管理平台

适应场景&#xff1a; 主要用于帮助DBA自动化很多日常工作&#xff0c;包括&#xff1a; 数据库状态监控 性能问题诊断 日志分析 自动巡检 问题告警 系统截图&#xff1a; main.py from flask import Blueprint, render_template, request, flash, redirect, url_for f…...

npm运行Vue项目报错 error:0308010c:digital envelope routines::unsupported

大家好&#xff0c;我是 程序员码递夫。 问题 VSCode 运行Vue项目&#xff0c;提示错误&#xff1a; building 2/2 modules 0 activeError: error:0308010c:digital envelope routines::unsupported 解决方法 原因是 npm 高版本(大于17)&#xff0c;对ssl的处理做了改进&…...

计数排序

目录 计数排序原理和步骤&#xff1a; 完整代码实现&#xff1a; 计数排序原理和步骤&#xff1a; 当一段数据比较集中在一个范围&#xff0c;比如 98&#xff0c;95&#xff0c;98&#xff0c;91&#xff0c;90&#xff0c;93&#xff0c;94&#xff0c;97&#xff0c;93&…...

MyBatis拦截器终极指南:从原理到企业级实战

在本篇文章中&#xff0c;我们将深入了解如何编写一个 MyBatis 拦截器&#xff0c;并通过一个示例来展示如何在执行数据库操作&#xff08;如插入或更新&#xff09;时&#xff0c;自动填充某些字段&#xff08;例如 createdBy 和 updatedBy&#xff09;信息。本文将详细讲解拦…...

Pythong 解决Pycharm 运行太慢

Pythong 解决Pycharm 运行太慢 官方给Pycharm自身占用的最大内存设低估了限制,我的Pycharm刚开始默认是256mb。 首先找到自己的Pycharm安装目录 根据合适自己的改 保存&#xff0c;重启Pycharm...

双ESP8266-01S通讯UDP配置

第一台ESP8266(发送命令需要勾---发送新行) ATCWMODE3 ATCWSAP_DEF"CAR_wifi_Master","12345678",5,3 //设置本地wifi名称以及密码 ATCIPSTA_DEF"192.168.4.1" //设置本地IP ATCIFSR …...

Molecular Communication(分子通信)与 Molecular Semantic Communication(分子语义通信)

1. 引言 随着传统无线通信在极端环境&#xff08;如微观生物体内、海洋深处&#xff09;中的局限性凸显&#xff0c;分子通信&#xff08;Molecular Communication, MC&#xff09;成为一种新型通信范式。分子通信通过分子作为信息载体&#xff0c;在纳米尺度上传输信息&#…...

Cookie:网页浏览背后的“小秘密”

在现代互联网的世界里&#xff0c;Cookie 是一个几乎无处不在的概念。它不仅影响着我们的网页浏览体验&#xff0c;还在背后默默地支持着许多网站的功能和服务。本文将带你全面了解 Cookie 的原理、作用、安全性以及如何管理它们。 一、什么是 Cookie&#xff1f; Cookie 是一…...

日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(6):動詞ない形について句型

日语学习-日语知识点小记-构建基础-JLPT-N4&N5阶段(6):動詞ない形について句型 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)~動詞な形 +なければなりません(2)~動詞な形  + なくてもいいです(3)に まで までに :区別3、单词(1)日语单词…...

华纳云:如何从服务器日志中发现僵尸进程?

在 CentOS 系统中&#xff0c;僵尸进程通常指那些已经完成执行但仍然在进程表中存在的进程。它们没有实际的执行&#xff0c;但仍然占用系统资源&#xff0c;通常会出现在父进程没有及时回收子进程的状态下。虽然僵尸进程本身不消耗 CPU 或内存资源&#xff0c;但它们会占用进程…...

fastadmin 接口请求提示跨域

问题描述 小程序项目&#xff0c;内嵌h5页面&#xff0c;在h5页面调用后端php接口&#xff0c;提示跨域。网上查找解决方案如下&#xff1a; 1&#xff0c;设置header // 在入口文件index.php直接写入直接写入 header("Access-Control-Allow-Origin:*"); header(&q…...

NHANES指标推荐:DDA!

文章题目&#xff1a;Association of dietary decanoic acid intake with diabetes or prediabetes: an analysis from NHANES 2005-2016 DOI&#xff1a;10.3389/fnut.2024.1483045 中文标题&#xff1a;饮食中癸酸摄入量与糖尿病或糖尿病前期的关系&#xff1a;2005-2016 年 …...

用大模型学大模型04-模型与网络

目前已经学完深度学习的数学基础&#xff0c;开始学习各种 模型和网络阶段&#xff0c;给出一个从简单到入门的&#xff0c;层层递进的学习路线。并给出学习每种模型需要的前置知识。增加注意力机制&#xff0c;bert, 大模型&#xff0c;gpt, transformer&#xff0c; MOE等流行…...

PostgreSQL 数据库压力测试指南

一、为什么需要压力测试&#xff1f; 数据库需要进行压力测试的原因主要包括以下几个方面&#xff1a; 性能评估&#xff1a;通过压力测试&#xff0c;可以了解数据库在高负载情况下的性能表现&#xff0c;包括响应时间、吞吐量和资源利用率等。这有助于确定系统的性能瓶颈。 …...

oppo,康冠科技25届春招内推

oppo&#xff0c;康冠科技25届春招内推 ①康冠科技25届春招 【职位】算法、软件、硬件、技术&#xff0c;结构设计&#xff0c;供应链&#xff0c;产品&#xff0c;职能&#xff0c;商务 【一键内推】https://sourl.cn/2Mm9Lk 【内推码】EVBM88 ②OPPO 2025届春招内推 招聘岗位…...

元学习之孪生网络Siamese Network

简介&#xff1a;元学习是一种思想&#xff0c;一般以神经网络作为特征嵌入的工具&#xff0c;实现对数据特征的提取&#xff0c;然后通过构造某种指标以引导优化器对模型参数进行优化。而最小化距离是最常见的学习目标&#xff0c;这就是熟知的度量学习&#xff0c;度量学习里…...

Python----PyQt开发(PyQt高级:组件大小,界面位置,按钮,文本显示,文本输入,字体大小)

一、大小 setMinimumSize(width, height) 描述: 设置控件的最小尺寸。控件不会被缩小到比这个尺寸更小的大小。 参数: width: 最小宽度&#xff08;以像素为单位&#xff09;。 height: 最小高度&#xff08;以像素为单位&#xff09;。 button.setMinimumSize(100, …...

qt + opengl 给立方体增加阴影

在前几篇文章里面学会了通过opengl实现一个立方体&#xff0c;那么这篇我们来学习光照。 风氏光照模型的主要结构由3个分量组成&#xff1a;环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子&#xff1a; 1 环境光照(Ambient …...

vue2老版本 npm install 安装失败_安装卡主

vue2老版本 npm install 安装失败_安装卡主 特别说明&#xff1a;vue2老版本安装慢、运行慢&#xff0c;建议升级vue3element plus vite 解决方案1&#xff1a; 第一步、修改npm 镜像为国内镜像 使用淘宝镜像&#xff1a; npm config set registry https://registry.npmmir…...

20250213编译飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1

20250213编译飞凌的OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1 2025/2/13 11:43 缘起&#xff1a;飞凌发布了高版本内核的适配OK3588-C的Buildroot的SDK&#xff1a;OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1。 但是编译异常了。 于是按照百度升级libc6&#xff0c;可以…...

中望CAD c#二次开发 ——VS环境配置

新建类库项目&#xff1a;下一步 下一步 下一步&#xff1a; 或直接&#xff1a; 改为&#xff1a; <Project Sdk"Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>NET48</TargetFramework> <LangVersion>pr…...

【Elasticsearch】词干提取(Stemming)

词干提取是将一个词还原为其词根形式的过程。这确保了在搜索过程中&#xff0c;一个词的不同变体能够匹配到彼此。 例如&#xff0c;walking&#xff08;行走&#xff09;和walked&#xff08;走过&#xff09;可以被还原到同一个词根walk&#xff08;走&#xff09;。一旦被还…...

Rander压力测试监测,更改服务端资源node

测试策略 压力测试&#xff0c; 目前是本地VM的资源不够&#xff0c;导致压力瓶颈&#xff0c;目前本地的VM&#xff0c;CPU是6个&#xff0c;可以增加到8个&#xff0c;服务端目前资源利用率没有达到最高点 we are now using 3 nodes with 3 pods, therefore, we need the …...

Go语言实现十大排序算法超细节图片讲解

基础排序 冒泡排序 将序列中的元素进行两两比较&#xff0c;将大的元素移动到序列的末尾。 平均时间复杂度是O(n^2)&#xff0c;最坏时间复杂度是O(n^2)&#xff0c;最好时间复杂度是O(n)&#xff0c;排序结果具有稳定性&#xff0c;空间复杂度是O(1)。 这里所说的稳定性是针对…...

linux-centos等测试环境做压力测试

一, jmeter环境安装 1, jdk下载安装 因为jmeter使用Java写的测试工具,应用需要jdk环境支持. yum -y install java-1.8.0-openjdk* 注意&#xff1a;【jdk和*通配符之间不能敲空格&#xff0c;有空格不能匹配所有的子文件】【安装过程中需要等待它执行完成&#xff0c;不要中…...