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: :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:

值得留意的是 Action 要领的 pageNumber 参数是可选的,意味着假如不传入的话,默认凭据 1 来计较,举个例子,假如底层的 AuthorList 有 100 笔记录 同时当前通报的 page =3,那么该要领将会返回 31-40 这10笔记录,这里的每页返回几多条是回收硬编码的,好比我这里界说的是10,各人可以按照本身的环境配置公道的值。

通过 request header 方法

大多环境下,在通报身份信息,隐私数据 等场景下会用到这种方法,好比说 Basic 验证,如下图:

ASP.NET Core中如何操纵多种要领给Action传参

又可能是将 信用卡 塞入到 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 来举办测试。

ASP.NET Core中如何操纵多种要领给Action传参

DefaultController 的完整代码

为了可以或许看到全貌,下面用 DefaultController 摆列了本篇聊到了所有传值方法。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdxyd.html