前言
一次HTTP请求,就是一次标准IO操作。请求是I,是输入;响应式O,是输出。任何web开发框架,其实都是在干这两件事:
- 接受请求并进行解析获取参数
- 根据参数进行渲染并输出响应内容
所以我们学习一个框架,我认为最首要的是知道如何从请求中获取参数。http请求携带参数的地方主要有下面几个地方:
- URL
- Header
- Body
下面看看ASP.NET Core是如何从这几个位置获取参数的。
通过URL获取参数
通过URL传参是HTTP最最常用的办法。这里简单介绍下URL相关的知识。一个URL主要分成4个部分,以http://localhost:5000/fromurl/test"color: #ff0000">通过QuerySting获取参数
Request.Query对象
// /fromurl/test"name"]; return Content(name); }
Request.Query对象包含了本次请求的QueryString的键值对列表,所以可以通过它轻松获取QueryString上携带的参数。
自动参数绑定
// /fromurl/test"htmlcode">public IActionResult Test2([FromQuery(Name = "id")]string bh) { return Content(bh); }如果参数绑定的名称跟QueryString的Key不一致,可以使用FromQueryAttribute强制指定绑定的Key的名称。
通过PATH获取参数
Request.Path对象
// /fromurl/test3 public IActionResult Test3() { var path = Request.Path; return Content(path); }Request.Path对象包含了本次http请求的Path的原始信息,一般可以通过/来分隔,手工获取想要的参数。
自动参数绑定
// /fromurl/Test4/mjzhou/1000 [Route("FromUrl/test4/{name}/{id}")] public IActionResult Test4(string name, int id) { return Content($"{name}/{id}"); }Path的自动参数绑定,需要配合RouteAttribute实现,RouteAttribute主要是指定一个Path的模板,通过这个模板可以告诉路由是否匹配这个Action,另外一个就是可以告诉参数绑定,如何解析这个path实现参数绑定。
[Route("FromUrl/test6/{name}/{id}")] public IActionResult Test6([FromRoute(Name ="name")]string xm, [FromRoute(Name = "id")]int bh) { return Content($"{xm}/{bh}"); }如果Action的型参名称跟RouteAttribute模板的中的名称不一样,那么可以使用FromRoute强制指定解析的名称。
[HttpGet("FromUrl/test5/{name}/{id}")] public IActionResult Test5(string name, int id) { return Content($"{name}/{id}"); }HttpGetAttribute、HttpPostAttribute等attribute同样可以完成RouteAttribute的效果,而且还指定了action接受的HTTP Method的方法,可以说是加强版的RouteAttribute。
从Header上获取参数
添加一个FromHeaderController,通过几个action来演示如果从http headers上获取参数。
Request.Headers对象
// /FromHeader/test public IActionResult Test() { var myName = Request.Headers["myName"]; return Content(myName); }Request.Headers是一个字典,包含了本次请求的Headers。所以我们可以通过Request.Headers对象轻松获取某个header的值。
自动参数绑定
public IActionResult Test1([FromHeader]string myName) { return Content(myName); }通过在action的型参上打上FromHeaderAttribute,可以告诉框架自动从header获取参数。
public IActionResult Test2([FromHeader(Name = "myName")]string name) { return Content(name); }如果action的型参跟header的key值不一致,可以通过FromHeaderAttribute强制指定匹配的header的key值。
从Body获取参数
我们开发的时候经常通过表单提交数据,或者通过AJAX往后台提交一个JavaScript对象,本质上这些数据都是通过HTTP的Bady提交回去的。新建一个FromBodyController控制器,通过几个Action来演示如何获取Body的参数。
Request.Body对象
public class model1 { public string NAME { get; set; } } public async Task<IActionResult> Test() { Request.EnableBuffering(); string body = ""; var stream = Request.Body; if (stream != null) { stream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(stream, Encoding.UTF8, true, 1024, true)) { body = await reader.ReadToEndAsync(); } stream.Seek(0, SeekOrigin.Begin); } var model = JsonConvert.DeserializeObject<model1>(body); return Content(model.NAME); }Request.Body是一个Stream,保存了本次请求的body数据。所以我们只要把这个stream读出来,就能获取提交的数据。有了原始的数据,就可以通过反序列化等操作转换为模型,更简单的获取参数了。注意,ASP.NET Core想要读取这个对象,必须先调用Request.EnableBuffering()这个方法。
使用postman测试一下:
参数自动绑定
public IActionResult Test1([FromBody]model1 model) { return Content(model.NAME); }使用FromBodyAttribute可以把body的数据自动反序列化成型参的模型。但是请注意使用[FromBody]请求的Content-Type必须是application-json。
使用postman测试下:
public IActionResult Test2([FromForm]model1 model) { return Content(model.NAME); }使用FromFormAttribute可以把body的数据自动反序列化成型参的模型。但是请注意使用[FromForm]请求的Content-Type必须是application/x-www-form-urlencoded。
总结
ASP.NET Core获取请求参数主要从URL,Headers,Body等位置获取。我们可以通过Request.Query、Request.Headers、Request.Body来手工获取数据。也可以通过[FromQuery]、[FromHeader]、[Frombody]等Attribute来实现参数的自动绑定。
好了,到此这篇关于ASP.NET Core MVC获取请求的参数的文章就介绍到这了,更多相关ASP.NET Core MVC获取请求参数内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 模拟之声慢刻CD《柏林之声4》[正版CD低速原抓WAV+CUE]
- 李宗盛 《李宗盛经典金曲》[WAV+CUE][1G]
- 周华健《粤语精选》[WAV+CUE][1G]
- 蔡婧2024《天空》HQCDII头版限量编号[WAV+CUE][1G]
- 陈奂仁.2011-谁是陈奂仁【BBS】【FLAC分轨】
- 群星.2024-幻乐森林影视原声带【韶愔音乐】【FLAC分轨】
- 黎明.1999-向往金色的黎明新歌+精选2CD【环球】【WAV+CUE】
- 发烧女声Méav《美芙的祈祷》发烧女声 [WAV+CUE][820M]
- 雷婷 《我的爱回不来》紫银合金AQCD [WAV+CUE][1G]
- 群星 DTS《天籁之音·唱醉了草原》2CD[WAV分轨][1.6G]
- 魔兽世界wlk毁灭术一键输出宏是什么 wlk毁灭术一键输出宏介绍
- 三国志8重制版无法与武将交流怎么办 无法与武将交流解决方法一览
- 三国志8重制版恶名怎么消除 恶名影响与消除方法介绍
- 模拟之声慢刻CD《柏林之声5》2019[原抓WAV+CUE]
- AlexandraSoumm-Parisestunefte(2024)[24Bit-96kHz]FLAC