加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

ASP.NET Core MVC获取请求的参数方法示例

发布时间:2020-05-10 19:23:59 所属栏目:编程 来源:站长网
导读:副问题#e# 一次HTTP哀求,就是一次尺度IO操纵。哀求是I,是输入;相应式O,是输出。任何web开拓框架,着实都是在干这两件事: 接管哀求并举办理会获取参数 按照参数举办渲染并输出相应内容 以是我们进修一个框架,我以为最主要的是知道怎样从哀求中获取参数
副问题[/!--empirenews.page--]

一次HTTP哀求,就是一次尺度IO操纵。哀求是I,是输入;相应式O,是输出。任何web开拓框架,着实都是在干这两件事:

接管哀求并举办理会获取参数

按照参数举办渲染并输出相应内容

以是我们进修一个框架,我以为最主要的是知道怎样从哀求中获取参数。http哀求携带参数的处所首要有下面几个处所:

URL

Header

Body

下面看看ASP.NET Core是怎样从这几个位置获取参数的。

通过URL获取参数

通过URL传参是HTTP最最常用的步伐。这里简朴先容下URL相干的常识。一个URL首要分成4个部门,以:5000/fromurl/test?name=mjzhou&age=10为例:


  协议  
localhost:5000   主机地点  
/fromurl/test   PATH  
name=mjzhou&age=10   QueryString  

我们凡是行使PATH跟QueryString来转达参数。新建一个MVC项目,新建一个Controller名为FromUrlController,通过几个Action来演示怎样从URL上获取参数。

通过QuerySting获取参数

Request.Query工具

// /fromurl/test?name=mjzhou public IActionResult Test() { var name = Request.Query["name"]; return Content(name); }

Request.Query工具包括了本次哀求的QueryString的键值对列表,以是可以通过它轻松获取QueryString上携带的参数。

自动参数绑定

// /fromurl/test?name=mjzhou public IActionResult Test1(string name) { return Content(name); }

假如Action的型参的名称跟QueryString的Key同等,则MVC框架会自动帮我们绑定参数的值,不消手动获取。

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测试下:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读