华域联盟 .Net ASP.NET Core中如何利用多种方式给Action传参

ASP.NET Core中如何利用多种方式给Action传参

ASP.NET Core中如何利用多种方式给Action传参
 更新时间:2020年12月15日 10:16:17   作者:码农读书  

这篇文章主要给大家介绍了关于ASP.NET Core中如何利用多种方式给Action传参的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言
ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且 高度模块化的web框架。在 ASP.NET Core MVC 中有很多种方式可以给 Action 方法传递参数,比如说:url方式,querystring方式,request header,request body,form 等等。本篇就和大家一起讨论下如何使用这些方式,并且用代码去一一验证。
创建 AuthorRepository 类
在这个例子中我会使用一个 Repository 类,然后在 Controller 下的 Action 方法调用这个 Repository 来实现基本的 CURD 操作,首先我们声明一个 Author 类,代码如下:

public class Author
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

AuthorRepository 类提供了如下三个方法。

GetAuthor 用于从泛型集合中获取 Author 实体
Save 用于将 Author 保存到底层的 泛型集合中
GetAuthors 用于分页获取 泛型集合中的数据

具体代码如下:

public class AuthorRepository
{
List<Author> authors = new List<Author>()
{
new Author
{
Id = 1,
FirstName = "Joydip",
LastName = "Kanjilal"
},
new Author
{
Id = 2,
FirstName = "Steve",
LastName = "Smith"
}
};
public Author GetAuthor(int id)
{
return authors.FirstOrDefault(a => a.Id == id);
}
public List<Author> GetAuthors(int pageNumber = 1)
{
int pageSize = 10;
int skip = pageSize * (pageNumber - 1);
if (authors.Count < pageSize)
pageSize = authors.Count;
return authors
.Skip(skip)
.Take(pageSize).ToList();
}
public bool Save(Author author)
{
var result = authors.Where(a => a.Id == author.Id);
if (result != null)
{
if (result.Count() == 0)
{
authors.Add(author);
return true;
}
}
return false;
}
}

通过 url 方式

最简单粗暴的给 Action 传参就是通过 url 方式,下面的代码片段展示了如何通过 url 进行传参。

[HttpGet] [Route("Default/GetAuthor/{authorId:int}")] public IActionResult GetAuthor(int authorId)
{
var data = authorRepository.GetAuthor(authorId);
return View(data);
}

输入的 url 格式如下:

GET: localhost:8061/Default/GetAuthor/1

通过 querystring 方式

这种方式的做法就是采用 ? 的模式,好处在于可以不修改 url 的结构信息,所以它具有向后兼容性,考虑下面的代码片段,它是如何使用 querystring 方式向 action 传参的?

[HttpGet] [Route("Default/GetAuthors/{pageNumber:int}")] public IActionResult GetAuthors([FromQuery
(Name = "pageNumber")] int pageNumber = 1)
{
var data = authorRepository.GetAuthors(pageNumber);
return Ok(data);
}

输入的 url 格式如下:

GET: localhost:8061/Default/GetAuthors?pageNumber=1

值得注意的是 Action 方法的 pageNumber 参数是可选的,意味着如果不传入的话,默认按照 1 来计算,举个例子,如果底层的 AuthorList 有 100 条记录 同时当前传递的 page =3,那么该方法将会返回 31-40 这10条记录,这里的每页返回多少条是采用硬编码的,比如我这里定义的是10,大家可以根据自己的情况设置合理的值。
通过 request header 方式

大多情况下,在传递身份信息,隐私数据 等场景下会用到这种方式,比如说 Basic 验证,如下图:

又或者是将 信用卡 塞入到 header 中,下面的代码展示了如何在 Action 中接收 header 中的信用卡号码。

[HttpGet] [Route("Default/IsCreditCardValid/{creditCardNumber}")] public IActionResult IsCreditCardValid([FromHeader] string creditCardNumber)
{
string regexExpression =
"^(?:(?<visa>4[0-9]{12}(?:[0-9]{3})?)|" +
"(?<mastercard>5[1-5][0-9]{14})|" +
"(?<amex>3[47][0-9]{13})|)$";
Regex regex = new Regex(regexExpression);
var match = regex.Match(creditCardNumber);
return Ok(match.Success);
}

为了简化目的, IsCreditCardValid 方法只能验证 Visa,MasterCard,Amex 这三种类型的信用卡,如果还想扩展到其他信用卡的话,你可以自己修改一下,因为信用卡号码一般需要被安全的传递,所以采用这种方式还是很不错的选择,下面展示了如何通过 PostMan 将 信用卡号码 塞入到 header 中。
使用 request body 方式

request body 常常用于执行 insert 或者 update 操作,也是我们平时在web开发中用的最多的一种参数传递方式,下面的代码片段展示了如何使用在 Action 中接收 request body。

[HttpPost] [Route("Default/Insert")] public IActionResult Insert([FromBody] Author author)
{
return Ok(authorRepository.Save(author));
}

接下来看看前端如何 post 数据到 后端来,这里继续使用 Postman 来进行测试。

DefaultController 的完整代码

为了能够看到全貌,下面用 DefaultController 罗列了本篇聊到了所有传值方式。

public class DefaultController : Controller
{
private readonly AuthorRepository authorRepository =
new AuthorRepository();
[HttpGet] [Route("Default/GetAuthor/{authorId:int}")] public IActionResult GetAuthor(int authorId)
{
var data = authorRepository.GetAuthor(authorId);
return Ok(data);
}
[HttpGet] [Route("Default/GetAuthors/{pageNumber:int}")] public IActionResult GetAuthors([FromQuery
(Name = "pageNumber")] int pageNumber = 1)
{
var data = authorRepository.GetAuthors(pageNumber);
return Ok(data);
}
[HttpGet] [Route("Default/IsCreditCardValid/{creditCardNumber}")] public IActionResult IsCreditCardValid
([FromHeader] string creditCardNumber)
{
string regexExpression =
"^(?:(?<visa>4[0-9]{12}(?:[0-9]{3})?)|" +
"(?<mastercard>5[1-5][0-9]{14})|" +
"(?<amex>3[47][0-9]{13})|)$";
Regex regex = new Regex(regexExpression);
var match = regex.Match(creditCardNumber);
return Ok(match.Success);
}
[HttpPost] [Route("Default/Insert")] public IActionResult Insert([FromBody] Author author)
{
return Ok(authorRepository.Save(author));
}
}

最后,你也可以采用 form 的形式给 Action 传递参数,不过 form 的场景更多的用于 文件上传,要这么做的话,可以利用 IFormFile 去搞定。
到此这篇关于ASP.NET Core中如何利用多种方式给Action传参的文章就介绍到这了,更多相关ASP.NET Core用多种方式给Action传参内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!
译文链接:www.infoworld.com/article/3568209/how-to-pass-parameters-to-action-methods-in-asp-net-core-mvc.html

您可能感兴趣的文章:ASP.NET Core中的Action的返回值类型实现

asp.netcore
action
传参

相关文章
解决uploadify使用时session发生丢失问题的方法这篇文章主要为大家详细介绍了uploadify使用时发现session发生丢失问题的解决方法,遇到过类似问题的朋友可以参考本文进行解决 2016-05-05
Log4net.config配置启用常用方法汇总这篇文章主要介绍了Log4net.config配置启用常用方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 2020-07-07
.Net Core中使用Quartz.Net实践记录Quartz.NET是一套很好的任务调度框架。下面这篇文章主要给大家介绍了关于.Net Core中使用Quartz.Net的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧 2018-09-09
ASP.NET将文件写到另一服务器(图文教程)及注意事项有时我们需要将来自于客户端的文件上传到WEB服务器端,并在服务端将文件存储到第三方文件服务器中存储,既然有需求,那就有实现了,感兴趣的你可以了解此文,或许对你学习asp.net 起到很好的作用哦 2013-01-01
Asp.net导出Excel/Csv文本格式数据的方法这篇文章主要介绍了Asp.net导出Excel/Csv文本格式数据的方法,比较实用,需要的朋友可以参考下 2014-09-09
近几天对DataSet的新认识近几天对DataSet的新认识... 2007-04-04
asp.net文件上传功能(单文件,多文件,自定义生成缩略图,水印)上传功能,是大家经常用到了,可能每一个项目都可以会用到。网上到处都有上传功能的代码。比我写的好的有很多。我这里也仅是分享我的代码。 2011-09-09
asp.net基于HashTable实现购物车的方法这篇文章主要介绍了asp.net基于HashTable实现购物车的方法,涉及asp.net中HashTable结合session实现购物车功能的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 2015-12-12
ASP.NET存储过程实现分页效果(三层架构)这篇文章主要为大家详细介绍了ASP.NET存储过程实现分页,利用三层架构实现分页效果,有参考价值的一篇文章,感兴趣的小伙伴们可以参考一下 2016-05-05
TreeView创建IHierarchicalDataSource类型的数据源实现为TreeView创建IHierarchicalDataSource类型的数据源实现 2009-01-01

最新评论

本文由 华域联盟 原创撰写:华域联盟 » ASP.NET Core中如何利用多种方式给Action传参

转载请保留出处和原文链接:https://www.cnhackhy.com/5008.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部