码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET Core MVC中URL和数据模型的匹配

时间:2019-01-31 13:18:21      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:col   address   bsp   from   asp.net   get请求   接下来   不完全   list   

Http GET方法


 

首先我们来看看GET方法的Http请求,URL参数和ASP.NET Core MVC中Controller的Action方法参数匹配情况。

 

我定义一个UserController,其中有一个只接受GET请求的Action方法GetDataInPage

public class UserController : Controller
{
    [HttpGet]
    public IActionResult GetDataInPage(string languageCode, int currentPage, int pageSize)
    {
        return View();
    }
}

GetDataInPage方法有三个参数,那么接下来我们如果在Http请求的URL中不完全提供这三个参数的值,我们来看看会发生什么。

 

首先我们用如下URL,只提供currentPage和pageSize参数的值

http://localhost:9081/User/GetDataInPage?currentPage=5&pageSize=20

我们会发现,UserController的GetDataInPage方法可以成功执行,其中:

  • languageCode参数为null
  • currentPage参数为5
  • pageSize参数为20

这说明如果在URL参数中,缺少languageCode参数是没有问题的,UserController的GetDataInPage方法可以被执行。

 

接下来如果我们在如下URL中,只提供languageCode和currentPage参数的值

http://localhost:9081/User/GetDataInPage?languageCode=CN&currentPage=5

我们会发现,UserController的GetDataInPage方法也可以成功执行,其中:

  • languageCode参数为CN
  • currentPage参数为5
  • pageSize参数为0

可以看到即便是我们没在URL参数中提供pageSize参数,但是pageSize参数在UserController的GetDataInPage方法也被初始化为0了,并没有妨碍UserController的GetDataInPage方法执行。

 

接下来如果我们在如下URL中,什么参数都不提供

http://localhost:9081/User/GetDataInPage

我们会发现,UserController的GetDataInPage方法也可以成功执行,其中:

  • languageCode参数为null
  • currentPage参数为0
  • pageSize参数为0

我们看到这次UserController的GetDataInPage方法还是被执行了,但是其三个参数都没有从URL中获取到值,不得不说ASP.NET Core MVC的模型绑定机制包容性还是很强的,这次我们一个URL参数都没有提供,UserController的GetDataInPage方法还是被执行了。

 

接下来如果我们在如下URL中,给参数pageSize提供错误的数据类型

http://localhost:9081/User/GetDataInPage?languageCode=CN&currentPage=5&pageSize=ABC

可以看到,UserController的GetDataInPage方法要求pageSize参数是int类型,但是我们却在URL参数中提供的是字符ABC,这种情况下UserController的GetDataInPage方法还是可以被执行,其中:

  • languageCode参数为CN
  • currentPage参数为5
  • pageSize参数为0

可以看到ASP.NET Core MVC直接忽略掉了URL参数中的pageSize=ABC,将UserController中GetDataInPage方法的pageSize参数设置为了0

 

接下来如果我们在如下URL中,提供多余的URL参数message和number

http://localhost:9081/User/GetDataInPage?languageCode=CN&currentPage=5&pageSize=10&message=ABC&number=100

我们会发现,UserController的GetDataInPage方法也可以成功执行,其中:

  • languageCode参数为CN
  • currentPage参数为5
  • pageSize参数为10

可以看到多余的URL参数message和number,不会对UserController的GetDataInPage方法造成影响,GetDataInPage方法还是被成功执行了。

 

 

Http POST方法


 

接下来,我们来用POST方法的Http请求,看看和ASP.NET Core MVC中Controller的Action方法参数匹配情况。

 

我们将UserController稍作更改,在其内部定义了一个只接受POST请求的Action方法AddUser,注意我们给AddUser方法的UserModel user参数前面加上了[FromBody]标签特性,说明UserModel user参数会从Http请求的Body中获取Json数据来进行模型绑定

public class UserController : Controller
{
    [HttpPost]
    public IActionResult AddUser([FromBody]UserModel user)
    {
        return View();
    }
}

其中AddUser方法的参数UserModel定义如下

public class UserModel
{
    public string UserCode { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string LanguageCode { get; set; }
    public string MailAddress { get; set; }
    public IList<string> RoleCodes { get; set; }
    public int Status { get; set; }
}

 

然后我们用POST方法的Http请求,发送如下Json数据到,该Json只给UserModel类的

{
  "userCode": "U001",
  "username": "James",
  "status": 1
}

 

ASP.NET Core MVC中URL和数据模型的匹配

标签:col   address   bsp   from   asp.net   get请求   接下来   不完全   list   

原文地址:https://www.cnblogs.com/OpenCoder/p/10340951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!