一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET Core中如何利用多種方式給Action傳參

ASP.NET Core中如何利用多種方式給Action傳參

2021-12-07 15:29碼農讀書 ASP.NET教程

這篇文章主要給大家介紹了關于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 類,代碼如下:

?
1
2
3
4
5
6
public class Author
{
 public int Id { get; set; }
 public string FirstName { get; set; }
 public string LastName { get; set; }
}

AuthorRepository 類提供了如下三個方法。

  • GetAuthor 用于從泛型集合中獲取 Author 實體
  • Save 用于將 Author 保存到底層的 泛型集合中
  • GetAuthors 用于分頁獲取 泛型集合中的數據

具體代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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 進行傳參。

?
1
2
3
4
5
6
7
[HttpGet]
[Route("Default/GetAuthor/{authorId:int}")]
public IActionResult GetAuthor(int authorId)
{
  var data = authorRepository.GetAuthor(authorId);
  return View(data);
}

輸入的 url 格式如下:

GET: http://localhost:8061/Default/GetAuthor/1

通過 querystring 方式

這種方式的做法就是采用 ? 的模式,好處在于可以不修改 url 的結構信息,所以它具有向后兼容性,考慮下面的代碼片段,它是如何使用 querystring 方式向 action 傳參的?

?
1
2
3
4
5
6
7
8
[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: http://localhost:8061/Default/GetAuthors?pageNumber=1

值得注意的是 Action 方法的 pageNumber 參數是可選的,意味著如果不傳入的話,默認按照 1 來計算,舉個例子,如果底層的 AuthorList 有 100 條記錄 同時當前傳遞的 page =3,那么該方法將會返回 31-40 這10條記錄,這里的每頁返回多少條是采用硬編碼的,比如我這里定義的是10,大家可以根據自己的情況設置合理的值。

通過 request header 方式

大多情況下,在傳遞身份信息,隱私數據 等場景下會用到這種方式,比如說 Basic 驗證,如下圖:

ASP.NET Core中如何利用多種方式給Action傳參

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

?
1
2
3
4
5
6
7
8
9
10
11
12
[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。

?
1
2
3
4
5
6
[HttpPost]
[Route("Default/Insert")]
public IActionResult Insert([FromBody] Author author)
{
  return Ok(authorRepository.Save(author));
}

接下來看看前端如何 post 數據到 后端來,這里繼續使用 Postman 來進行測試。

ASP.NET Core中如何利用多種方式給Action傳參

DefaultController 的完整代碼

為了能夠看到全貌,下面用 DefaultController 羅列了本篇聊到了所有傳值方式。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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傳參內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

譯文鏈接:https://www.infoworld.com/article/3568209/how-to-pass-parameters-to-action-methods-in-asp-net-core-mvc.html

原文鏈接:https://mp.weixin.qq.com/s/FShk6zUP-p58o-MM1_I9bA

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青在线视频免费 | pregnanthd产子 | 国产愉拍 | 暖暖免费观看高清在线 | 欧美成人免费tv在线播放 | 精品91自产拍在线 | 午夜理论片YY4399影院 | 国产在线三级 | 男男gaygays国内| 亚洲另类老妇videos | 911爱豆传媒国产 | freefron性中国国产高清 | 国产精品永久免费视频 | 男人天堂国产 | 视频一区二区三区在线观看 | 狠狠色综合久久久久尤物 | 国产精品亚洲片夜色在线 | 爆操俄罗斯美女 | 性xxxx18学生第一次出血 | 美女扒开腿让男人桶爽免费gif | 成人精品mv视频在线观看 | 久久亚洲精品AV成人无码 | 114毛片免费观看网站 | 午夜影院0606免费 | 日本护士撒尿 | 精品久久久久久亚洲 | 色男人影院 | 9久热这里只有精品免费 | 免费一级毛片在级播放 | 亚洲精品老司机福利在线播放 | 国产成人免费在线视频 | 成人精品第一区二区三区 | 99久久999久久久综合精品涩 | 555www成人网| 学校女性奴sm训练调教 | 小舞丝袜调教喷水沦为肉奴 | 俄罗斯女人与公拘i交酡 | 蜜桃视频一区二区三区四区 | 国产一区二区三区福利 | 色操网| 99久久精品国语对白 |