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

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
}

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

时间: 2024-10-12 23:29:57

ASP.NET Core MVC中URL和数据模型的匹配的相关文章

007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Changing views and layout pages 修改视图和布局页 2.Change the title and menu link in the layout file 在布局文件中修改标题与菜单 3.Passing Data from the Controller to the View 从控制器向视图

ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据

在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让用户下载,那么在Controller的Action中用Response.Body这个Stream流,来逐步发送文件数据到客户端浏览器是最好的办法. 但是我今天在ASP.NET Core MVC的Controller的Action中使用Response.Body输出数据到客户端浏览器的时候遇到了个问题

asp.net core mvc中如何把二级域名绑定到特定的控制器上

由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情况下需要给不同的板块设置不同的二级域名,如新浪体育sports.sina.com.cn. 在asp.net core mvc中,如果要实现板块的效果,可能会给不同的板块建立不同的控制器(当然也有其他的技术,这里不讨论实现方式的好坏),在这种情况下,如何给控制器绑定上独有的二级域名,比如体育频道对应的

在ASP.NET Core MVC中构建简单 Web Api

Getting Started 在 ASP.NET Core MVC 框架中,ASP.NET 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 Web Api 程序怎么办呢? 在 GitHub 中的 ASP.NET Core MVC 源码里面,我们只要关注 Microsoft.AspNetCore.Mvc 这个包,那么除了这个包之外它还包含这些: Microsoft.AspNetCore.Mvc.ApiExplorer Microsoft.

c# – Asp.Net Core MVC中Request.IsAjaxRequest()在哪里?

要了解有关新的令人兴奋的Asp.Net-5框架的更多信息,我正在使用最新发布的Visual Studio 2015 CTP-6来构建一个Web应用程序. 大多数事情看起来真的很有希望,但我似乎找不到Request.IsAjaxRequest() – 一个在旧的MVC项目中经常使用的功能. 有没有更好的方法来做到这一点 – 这使得他们删除这种方法 – 或者是“隐藏”在别的地方? 感谢任何建议,在哪里找到它或做什么改为! 我有点困惑,因为标题提到了MVC 5. 搜索Ajax in the MVC6

三分钟学会在ASP.NET Core MVC 中使用Cookie

一.Cookie是什么? 我的朋友问我cookie是什么,用来干什么的,可是我居然无法清楚明白简短地向其阐述cookie,这不禁让我陷入了沉思:为什么我无法解释清楚,我对学习的方法产生了怀疑!所以我们在学习一个东西的时候,一定要做到知其然知其所以然. HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息).客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.客户端浏览器会把Cooki

ASP.NET Core MVC 中实现中英文切换

哈喽..大家好 很久没有更新了,今天就来一篇最近开发用到的功能,那就是中英文切换,这个实际上也不是高大上,先说一下原理,在.NET Core框架中给我们提供了全球化的类,叫做Localization,其官方的文档地址传送门. 在我的项目中,我是这样操作的,你想用别的方式,也可以看文档自己去搞.这个已经不是什么新鲜的东西了,只是网上的实现有些问题,不容易明白. 我们无需任何Nuget包,因为它是在 Microsoft.AspNetCore.Mvc.Localization 中,那么我们直接在.NE

ASP.NET Core MVC 中两种路由的简单配置

1.全局约定路由 这种方式配置优先级比较低,如果控制器或者方法上标记了特性路由那么优先走特性路由. 当建立好一个mvc项目里,路由都是默认配置好的. 如果建立的是空项目那么需要手动配置: 1.需要在ConfigureServices方法中添加mvc服务 services.AddMvc(); 2.在Configure添加mvc中间件: app.UseMvcWithDefaultRoute(); //添加mvc中间件并使用默认路由配置 这里添加mvc中间时使用的是默认的路由配置,默认的路由配置就是跟

asp.net core mvc 中 ModelState.IsValid 值是fasle

问题描述:ModelState.IsValid 值是fasle 可能是Model绑定的模型里面的内容不能为空,但是实际上是空的. 原文地址:https://www.cnblogs.com/xiaobudong/p/10102161.html