【C#】.net core 6.0 ApiController,API控制器方法,API接口以实体类作为接收参数应该注意的点

欢迎来到《小5讲堂》
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 背景
  • 实体类参数
  • API接口
  • 不可空参数
  • 可空参数
  • 参数类型
  • MVC历程
  • 相关文章

背景

对于API接口,接收参数的类型会有很多,有些是地址参数,有些是Form表单参数。
对于不同的后端开发语言,可能会有一定的限制,比如本次文章探讨的API控制器方法接收实体类参数问题。
如果实体类的参数是字符串并且没有指明是否可空,那么这个API接口则无法调用成功。

实体类参数

假设定义一个实体类,有两个参数,一个是Name字符串类型,一个是Age整型。

 public class TempModel{public string Name { get; set; }public int Age { get; set; }}

API接口

不可空参数

  • 代码
using Microsoft.AspNetCore.Mvc;namespace core60api.Api
{/// <summary>/// 临时 - api接口/// </summary>[ApiController][Route("api/[controller]/[action]")]public class TempController : ControllerBase{public async Task<IActionResult> Get(TempModel model){return Ok($"Name={model.Name},Age={model.Age}");}public class TempModel{public string Name { get; set; }public int Age { get; set; }}}
}
  • 调用报错
    地址参数方式
    在这里插入图片描述
    表单方式在这里插入图片描述

  • 正确调用方式
    必须设置正确的Content-Type = application/json,并且Request Body请求为Raw

Raw = application/json
Form = application/x-www-form-urlencoded
File = multipart/form-data
在这里插入图片描述

  • 不传必要参数报错
    在这里插入图片描述

可空参数

将Name字符串参数设置为可空,因为Age本身不赋值会默认为0,因为不传值也会有默认值

public class TempModel
{public string? Name { get; set; }public int Age { get; set; }
}

在这里插入图片描述

参数类型

在C# MVC中,控制器(Controller)接收参数的方式主要有以下几种:
1.路由参数(Route Parameters)
路由参数是指通过URL中的路由模式来传递参数给控制器的一种方式。
在路由配置中定义参数的名称和位置,控制器方法的参数列表中使用相同的名称来接收参数值。
例如:

// 路由配置
routes.MapRoute(name: "MyRoute",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);// 控制器方法
public ActionResult Details(int id)
{// 使用id参数进行操作return View();
}

在URL中,例如/Home/Details/123,123就是id参数的值。

2.查询字符串参数(Query String Parameters)
查询字符串是URL中以问号(?)开头的部分,用来传递键值对形式的参数。
在控制器方法中,可以通过Request.QueryString对象或者通过方法参数直接接收查询字符串参数。
例如:

// 控制器方法
public ActionResult Search(string keyword)
{// 使用keyword参数进行搜索操作return View();
}

在URL中,例如/Home/Search?keyword=example,keyword参数的值为example。

3.表单参数(Form Parameters)
当通过表单提交数据时,控制器方法可以通过参数直接接收表单中的字段值。
在MVC中,可以使用模型绑定或者Request.Form对象来获取表单参数。
例如:

// 控制器方法
[HttpPost]
public ActionResult Create(UserModel model)
{// 使用model参数中的字段值进行创建操作return RedirectToAction("Index");
}

在这个例子中,UserModel是一个表示用户信息的类,控制器方法会自动将表单字段值绑定到该类的属性上。
这些是C# MVC中常用的接收参数的方式,开发者可以根据具体的场景选择合适的方式来接收参数。

MVC历程

C# MVC(Model-View-Controller)是一种软件架构模式,用于构建可维护、可扩展的Web应用程序。

C# MVC的发展历程主要可以分为以下几个阶段:
1.早期阶段
C# MVC的概念最早由Trygve Reenskaug在1970年代提出,但直到20世纪90年代末和21世纪初,才开始在Web开发领域中得到广泛应用。最早的C# MVC框架之一是ASP.NET MVC,它于2009年发布,是Microsoft推出的一种用于构建Web应用程序的框架。

2.ASP.NET MVC阶段
ASP.NET MVC框架在推出后得到了广泛的应用和认可。它采用了经典的MVC模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller),使得应用程序更易于维护和测试。ASP.NET MVC框架的发展一直持续到ASP.NET Core时代,成为了ASP.NET Core MVC的前身。

3.ASP.NET Core MVC阶段
随着.NET平台的发展和微软对开源的投入,ASP.NET Core框架在2016年推出,带来了许多创新和改进。ASP.NET Core MVC作为ASP.NET Core的一部分,提供了更快的性能、更好的跨平台支持以及更高的灵活性。ASP.NET Core MVC继续延续了经典的MVC模式,并且更加注重性能和跨平台特性。

4.现代化发展
随着前端技术的发展和单页应用程序(SPA)的流行,C# MVC框架也在不断演进。现代的C# MVC框架通常与前端框架(如React、Angular、Vue.js等)结合使用,通过API方式与前端交互,实现前后端分离。这种方式可以提高开发效率、灵活性和可维护性,同时还能更好地支持移动端应用开发。

总的来说,C# MVC框架经历了从早期的ASP.NET MVC到现代的ASP.NET Core MVC的演进,不断吸收和融合新的技术和思想,以满足不断变化的开发需求和技术趋势。

相关文章

【C#】.net core 6.0 ApiController,API控制器方法,API接口以实体类作为接收参数应该注意的点

【C#】 SortedDictionary,查找字典中是否存在给定的关键字

【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化

【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇

【C#】约瑟夫原理举例2个代码实现

【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推

【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode例题讲解:45.跳跃游戏Ⅱ

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…

【kettle012】kettle访问FTP服务器文件并处理数据至PostgreSQL(已更新)

1.一直以来想写下基于kettle的系列文章,作为较火的数据ETL工具,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下FTP服务器相关知识体系 3.欢迎批评指正,跪谢一键三连! kettle访问FTP服务器文件并处理数据至PostgreS…

南京中科微Ci24R1(DFN8)无线收发射频芯片性能介绍

Ci24R1是南京中科微研发的低成本高性能2.4GHz GFSK 无线收发芯片&#xff08;支持蓝牙版&#xff09;&#xff0c;专为低功耗无限场合设计&#xff0c;集成嵌入式ARQ基带协议引擎的无线收发器芯片。 工作频率为2400MHz-2525MHz&#xff0c;共有126个1MHz带宽的信道&#xff0c…

PAN2025 2.4GHz无线接收SoC芯片

PAN2025是一款内嵌32位MCU和2.4GHz收发器的SoC芯片。该收发器适用于2.400~2.483GHz**ISM频段。它集成了射频&#xff08;RF&#xff09;发射器和接收器&#xff0c;频率合成器&#xff0c;晶体振荡器&#xff0c;基带GFSK调制解调器等。PAN2025支持一对多网络和ACK通信。TX功率…

美股开户,你需要知道这些!

想投资美股&#xff0c;却不知道开户需要多少钱&#xff1f; 别担心&#xff0c;这篇专栏将告诉你美股开户的资金要求以及相关注意事项。 1. 美股开户需要多少钱&#xff1f; 答案是&#xff1a;有的&#xff0c;但门槛并不高。不同平台对开户资金的要求有所不同&#xff0c;一…

WEB基础--数据库事务与连接池

数据库事务 什么是事务 事务(Transaction,简写为tx): 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。 为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元: 当每个逻辑操作单元全部完成时,数据的一致性可以保持, 而当这个单…

elasticsearch搭建教程

主要参看这里就行,需要特别注意其中报错的解决方案&#xff1a;搭建elasticsearch 单机节点里&#xff0c;按照上述教程搭建只能开放本地访问&#xff0c;如果需要其他机器访问&#xff0c;需要在elasticsearch.yml里新增几个配置&#xff1a; node.name: node-1 network.host…

APP反抓包 - 服务端证书验证

案例引入: app:泡泡聊天 版本:v1.7.4 发送登录请求,抓包发现提示:403 Forbidden 这里就是使用了服务端证书校验,因为charles没有安装证书,所以到达服务器的响应没有通过验证,返回异常。 美之图: 一,校验逻辑 在安卓开发时,在客户端预设证书(p12/bks),客户端…

flink cdc,读取datetime类型

:flink cdc&#xff0c;读取datetime类型&#xff0c;全都变成了时间戳 Flink CDC读取MySQL的datetime类型时会转换为时间戳的问题&#xff0c;可以通过在Flink CDC任务中添加相应的转换器来解决。具体来说&#xff0c;可以在MySQL数据源的debezium.source.converter配置项中指…

AI仿站源码教程

AI仿站源码教程 随着AI技术的不断发展&#xff0c;仿站技术已经越来越成熟&#xff0c;通过AI一键仿站&#xff0c;开发者们可以更快速、更高效地搭建网站。传统的前端开发过程中&#xff0c;需要大量的手工编码和设计&#xff0c;而AI仿站技术可以通过截图或视频&#xff0c;…

智慧公厕:数据驱动的公共厕所智慧化管理

公共厕所作为城市基础设施的重要组成部分&#xff0c;对于城市居民的生活质量和城市形象有着不可忽视的影响。然而&#xff0c;传统的公共厕所管理模式存在诸多问题&#xff0c;如设施老化、卫生状况不佳等&#xff0c;严重限制了公众对于公共厕所的使用体验。随着大数据和智能…

计算机毕业设计系列~~~基于SSM的宠物销售网站

目录 一、项目介绍 二、开题报告 三、项目截图 一、项目介绍 本项目是一款基于SSM的宠物销售网站&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1. 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2. …

【笔记】从零开始做一个男性人体的流程/躯干篇(补充)

1.做手臂和腿部都记着【关键节点】的重要性

day5.12 leetcode80 删除有序数组重复项

删除有序数组重复项 给你一个有序数组 nums &#xff0c;请你** 原地** 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间…

2024年得物搬砖项目:轻松上手的高利润副业选择

越来越多的人都开始将目光转向互联网&#xff0c;无论是商家还是消费者&#xff0c;都已经习惯网上卖货和购买 其实&#xff0c;其主要原因还是因为如今的生活节奏快&#xff0c;现在的消费主力军转移到了90、00后身上。他们往往忙于工作或者是家庭&#xff0c;无暇去逛商场&a…

webpack压缩css代码示例:压缩css

css-loader用来解析.css文件&#xff0c;将之转换成commjs模块 style-loader用来将css注入到dom中 尽管css-loader和style-loader提供将css导入到js并注入到dom的功能&#xff0c;但webpack默认并不负责压缩css&#xff0c; css-minimizer-webpack-plugin只处理分离出来的CSS文…

jQuery-2.鼠标焦点事件、节点操作、遍历元素、效果

鼠标事件 鼠标事件是当用户在文档上移动或单击鼠标时而产生的事件&#xff0c;常用的鼠标事件&#xff1a; 方法 描述 执行时机 click() 触发或将函数绑定到指定元素的click事件 单击鼠标时 mouseover() 触发或将函数绑定到指定元素的mouse over事件 鼠标移过时 mous…

《一“企”谈》∣企企通走进『鹏辉能源』,探索百亿储能上市企业如何实现供应链数字化转型

随着运营模式的升级和市场竞争的加剧&#xff0c;采购数字化已成为企业提升竞争力的关键。通过整合人工智能、大数据、云计算和物联网等先进技术&#xff0c;采购流程正逐步实现智能化、协同化和绿色化&#xff0c;大幅提升采购效率和决策质量。 广州鹏辉能源科技股份有限公司&…

mysql与idea连接

1、安装mysql&#xff0c;确保电脑中有sql数据库&#xff1b; 2、在‘服务’中开启mysql; 3、将mysql-connector-java-8.0.16.jar包放入web/WEB-INF/lib并配置&#xff1b; mysql-connector-java 5及以下&#xff0c;配置的是com.mysql.jdbc.Driver驱动mysql-connector-java 6…

webpack如何自定义一个loader

我们在使用脚手架的搭建项目的时候往往都会帮我们配置好所需的loader&#xff0c;接下来讲一下我们要如何自己写一个loader应用到项目中&#xff08;完整代码在最后&#xff09; 1. 首先搭建一个项目并找到webpack配置文件&#xff08;webpack.config.js&#xff09; 在modul…