- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ASP.NET Core中如何利用多种方式给Action传参由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且 高度模块化的web框架。在 ASP.NET Core MVC 中有很多种方式可以给 Action 方法传递参数,比如说:url方式,querystring方式,request header,request body,form 等等。本篇就和大家一起讨论下如何使用这些方式,并且用代码去一一验证.
在这个例子中我会使用一个 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 类提供了如下三个方法.
具体代码如下:
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
;
}
}
|
最简单粗暴的给 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 。
这种方式的做法就是采用 ? 的模式,好处在于可以不修改 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,大家可以根据自己的情况设置合理的值.
大多情况下,在传递身份信息,隐私数据 等场景下会用到这种方式,比如说 Basic 验证,如下图:
又或者是将 信用卡 塞入到 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 常常用于执行 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 来进行测试.
为了能够看到全貌,下面用 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 。
最后此篇关于ASP.NET Core中如何利用多种方式给Action传参的文章就讲到这里了,如果你想了解更多关于ASP.NET Core中如何利用多种方式给Action传参的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
主要思想是将 EF Core nuget 包添加到 .NET Core 库项目,然后在一堆应用程序(例如 ASP.NET Core、Win 服务、控制台应用程序)中使用该库,而无需在每个应用程序中配置
我想要实现的是编写一个简单的.net核心后台工作程序(.net core 3.1)的代码,在该工作程序作为Windows服务运行时,我在其中将数据写入SQL Server数据库(通过EF Core 3
关于 .Net Core SDK download page 二进制文件有什么用?它与安装程序有何不同? 最佳答案 二进制文件是 .NET Core 的编译代码。它们拥有运行 .NET Core 所需
.NET Core 和 Entity Framework Core 之间的区别?我们可以在 .NET Core 中使用 Entity Framework Core 吗?两者都有什么优势? 最佳答案 E
.NET Core 和 ASP.NET Core 到底有什么区别? 它们是相互排斥的吗?我听说 ASP.NET Core 是基于 .NET Core 构建的,但它也可以基于完整的 .NET 框架构建。
我对 ASP.NET Core 开发完全陌生。我正在尝试使用单个模型和 mysql 创建一个简单的 asp.net core Web api 来存储模型数据,然后我想使用 Swagger 将其作为 R
.NET Core 和 Entity Framework Core 之间的区别?我们可以在 .NET Core 中使用 Entity Framework Core 吗?两者都有什么优势? 最佳答案 E
好吧,作为一个新的 .net 开发生态系统,我有点迷失在核心工具、版本等方面。 有人可以解释我之间的区别吗 VS 2015 核心工具预览版 x - See here .NET Core/SDK 与否
我已阅读有关如何通过信号器核心集线器从后台服务向客户端发送通知的文档。如何从客户端接收到后台服务的通知? 后台服务应该只是一个单例。 public class Startup { public
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4年前关闭。 Improve t
非常简单的问题: 我正在尝试创建一个像这样的谓词构建器: var predicate = PredicateBuilder.False(); 但似乎在Net Core和EF Core中不可用。
在 .NET Core 自包含应用程序 中...我们需要在 project.json 中指定运行时 (RID) 我们希望我们的应用程序针对...发布为什么会这样? .NET Core 是跨平台的,与我
如何用 iCloud Core Data 替换我现有的 Core Data?这是我的持久商店协调员: lazy var persistentStoreCoordinator: NSPersistent
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 2 年前。 Improv
今天我正在学习新的 ASP.net 核心 API 3.1,我想将我的旧网站从 MVC4 转移到 Web API。除了一件事,一切都很好。数据库连接。在我的旧网站中,我为每个客户端(10/15 数据库)
我在 Visual Studio 2015 Update 3 和 .NET Core 1.0 中工作。我有一个 .NETCoreApp v1.0 类型的 Web API 项目。当我添加一个 .NET
我一直在尝试遵循 Ben Cull ( http://benjii.me/2016/06/entity-framework-core-migrations-for-class-library-proj
当我打开我的 vs 代码程序时,我收到以下消息: 无法找到 .NET Core SDK。 .NET Core 调试将不会启用。确保 .NET Core SDK 已安装并且在路径上。 如果我安装甚至卸载
我偶然发现了一个非常奇怪的问题。每当 Web 应用程序启动时,dotnet.exe 都会使用相当多的内存(大约 300M)。然而,当它触及某些部分时(我感觉这与 EF Core 使用有关),它会在短时
ASP.NET Core Web (.NET Core) 与 ASP.NET Core Web (.NET Framework) 有什么区别? .NET Framework 是否提供 similar
我是一名优秀的程序员,十分优秀!