上一章讲了系统如何将客户端提交的请求数据格式化处理成我们想要的格式并绑定到对应的参数,本章讲一下它的“逆过程”,如何将请求结果按照客户端想要的格式返回去。...(ASP.NET Core 系列目录) 一、常见的返回类型 以系统模板默认生成的Home/Index这个Action来说,为什么当请求它的时候回返回一个Html页面呢?...第三行的ActionResult 类型是在ASP.NET Core 2.1 引入的,它支持IActionResult的子类也支持类似string和Book这样的特定类型。...所以图 2中ActionResult 类型返回的结果被加上引号的意思就是结果类型可能是直接返回的IActionResult的子类,也有可能是string和Book这样的特定类型被封装后的ObjectResult...所以这个IActionResult类型的参数result实际上可能是JsonResult、ViewResult、EmptyResult等具体类型。
] 当前请求中的路由数据 [FromServices] 作为操作参数插入的请求服务 来一张 Postman 的图片: HTTP 请求中,会携带很多参数,这些参数可以在前端设置,例如表单、Header、...注意:本文全部使用 [HttpPost] ;全局使用 JsonResult 作为返回类型。 二....res 是请求成功后返回的信息,res.data 是请求成功后服务器返回的信息。即是 action 处理数据后返回的信息。...ASP.NET Core 自动生成的可读写的 Controller ,默认都是使用 [Bind] 来绑定数据。 文档定义:用于对复杂类型的模型绑定。...2, 返回的数据类型 特定类型 IActionResult 类型 ActionResult 类型 Action 的 return ,返回的数据类型必定是上面三种。
MVC控制器操作简介返回类型示例 ASP.NET Core MVC控制器参数映射逻辑说明 ASP.NET Core MVC控制器参数映射/获取示例 2、本教程环境信息 软件/环境 说明 操作系统 Windows...Controller接收到请求后根据路由的ActionName找到对应的Action,然后将用户的输入映射到该Action的参数,最终Action实际执行完成后再返回对应的输出。...不过在定义Action方法的时候,返回值类型也可以定义成string、int等,这些自定义的返回类型会在返回到响应流之前被框架自动包装到合适的ActionResult子类型中。...使用示例 定义返回JsonResult的Action public IActionResult JsonTest() { return Json(new { Message = "JsonResult...如果未找到参数对应的数据,且该参数类型是可以为null的类型,则null将作为参数值传递递,否则将会引发一场。
本篇文章着重介绍在进行Ajax调用中经常使用的两个ActionResult,即JavaScriptResult和JsonResult。[本文已经同步到《How ASP.NET MVC Works?》...返回类型为JavaScriptResult的Action方法一般用于处理Ajax请求。...但是对于后台程序来说,数据却是通过一个基于某种CLR类型的对象来承载,当客户端调用某个Action方法并希望以JSON的格式返回请求的数据时,ASP.NET MVC需要有一种机制将CLR对象转换成JSON...,JsonResult在默认的情况下不能作为对HTTP-GET请求的响应,在这种情况下并会直接抛出一个InvalidOperationException异常。...了解ASP.NET MVC几种ActionResult的本质:FileResult 了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult & JsonResult
在ASP.NET MVC中,会调用MvcHandler的ProcessRequest()方法,此方法会激活具体请求的Controller类对象,触发Action方法,返回ActionResult实例。...② 花样的返回类型 : ActionResult 以及它的子类们 ? ...在以往的ASP.NET MVC开发中,我们在Action方法的编写中,总会看到它们的返回类型都是以ActionResult为基类的各种Result类型。.../// /// Action统一的返回类型 /// public abstract class ActionResult {...它们的区别就在于是不同的返回类型,因此有不同的处理。 这里以ContentResult 和 JsonResult 为例,来看看具体做了什么处理。
这里我们选择ASP.NET MVC 4的源码作为分析对象,我已经将其上传到了网盘中,你可以通过下面这个地址进行下载: 传送门:http://pan.baidu.com/s/1bnF8ZPt 下载完成后...Action并获取所需的参数,然后调用InvokeActionMethodWithFilters方法执行Action。...转到定义一看,原来不就是我们在开发中经常返回的ActionResult类型吗?...,然后获得了一个returnValue返回值,通过传入返回值创建具体类型的ActionResult作为方法的返回值。...这里需要注意的是,ActionResult是一个抽象类,像什么JsonResult、EmptyResult、ViewResult等都是其子类,而这里的CreateActionResult就是要创建其具体子类的实例并返回
每一个请求都会经过控制器处理,控制器中的每个方法被称为控制器操作,它处理具体的请求。 1操作输入参数 控制器的操作的输入参数可以是内置类型也可以是自定义类型。...View 指定视图 EmptyResult 无 不返回任何内容 上述返回值类型均继承自ActionResult,除了上述类型外,控制器可以返回任意的类型!...,使用新名称作为路由参数,方可路由到该操作 例: [ActionName("AboutName")] public ActionResult About() { ...... } 11)NonActionAttribute...从线程池获得线程处理异步请求,异步调用完后,该线程回到线程池以便可以处理其他请求,同时通知ASP.NET重新抓取一个线程(不一定是处理异步请求的线程)来完成具体的异步操作(输出数据等)。...:OnActionExecuted 操作执行前被框架自动调用的方法:OnActionExecuting 返回结果后被框架自动调用的方法:OnResultExecuted 返回结果前被框架自动调用的方法:
上一篇文章,我介绍了使用 C# 9 的record类型作为强类型id,非常简洁 public record ProductId(int Value); 但是在强类型id真正可用之前,还有一些问题需要解决...,比如,ASP.NET Core并不知道如何在路由参数或查询字符串参数中正确的处理它们,在这篇文章中,我将展示如何解决这个问题。...415,.NET Core 不知道怎么把URL的参数转换为ProductId,由于它不是int,是我们定义的强类型ID,并且没有关联的类型转换器。...通用强类型id转换器 首先,让我们创建一个Helper •检查类型是否为强类型ID,并获取值的类型•获取值得类型,创建并缓存一个委托 public static class StronglyTypedIdHelper...; } } 到这里,我们可以直接删除之前的 ProductIdConvert, 现在有一个通用的可以使用,现在.NET Core 的路由匹配已经没有问题了,接下来的文章,我会介绍如何处理在JSON
1.2 Razor的语法 (1)Razor文件类型:Razor支持两种文件类型,分别是.cshtml 和.vbhtml,其中.cshtml 的服务器代码使用了c#的语法,.vbhtml 的服务器代码使用了...这样就解释了,我们在Action中可以不仅可以返回ViewResult还可以返回JsonResult的原因。通过下表,我们可以清晰地看到,ActionResult的各种派生类的详情: ? ...特别是,以前我们在WebForm时代常常与浏览器交互采用JSON格式的数据,需要使用JavaScriptSerializer这个类进行Serialize后返回。...但是,在MVC的Action中,微软已经帮我们封装了好了JsonResult,因此,我们可以高兴地感慨:返回Json,So Easy!...②url参数: url获取数据的规则,这里不是正则表达式,将要识别的参数括起来即可,比如: {controller}/{action} 最少只需要传递name和url参数就可以建立一条Routing
以用户登录场景为例,我们在通过Visual Studio的ASP.NET MVC项目模板创建的Web应用中定义了如下一个简单的数据类型LoginInfo封装用户登录需要输入的用户名和密码。...基于HTTP-GET的Action方法Index将会呈现一个用户登录View,该View使用创建的LoginInfo对象作为其Model。...(InvalidUserNameException和InvalidPasswordException)分别在输入无效用户名和密码是被抛出来,而我们需要处理的就是这两种类型的异常。...View是通过执行Action方法OnIndexError返回的ViewResult呈现出来的。...对于Ajax请求来说,我们最终会将通过EntLib处理后的异常封装成如下一个类型为ExceptionDetail的对象。
Asp.net MVC 中集成了以下几种ActionResults类型及对应的帮助类方法: ViewResult - 使用Controller中提供的View()方法返回一个ViewResult用来呈现指定或默认的...ContentResult - 使用Controller中提供的Content()方法返回一个ContentResult用来呈现指定的文本。...JsonResult - 使用Controller中提供的Json()方法返回一个JsonResult用来呈现序列化的Json格式数据。...EmptyResult - 返回一个空的结果。 HttpNotFoundResult - 使用Controller中提供的HttpNotFound()方法返回一个HTTP 404状态。...能否更改Action方法的命名? Ans. 可以通过ActionName特性来修改Action的命名。修改后Action将用ActionName中定义的名称被调用。
接下来,我同样使用简单的代码构建一个Mini版的MVC框架,让大家了解一下ASP.NET Core MVC背后的总体设计,以及针对请求的处理流程。[源代码从这里下载]。...我们利用MethodInfo的声明类型得到Controller的类型,将剔除“Controller”后缀的类型名称作为ControllerName属性(表示Controller的名称),作为Action...该方法返回类型为ValueTask,泛型参数代表的object就是执行Action方法得到的返回值(对于返回类型为void的方法,这个值总是Null)。...>对象(具体返回的是一个JsonResult对象)。...我们使用Fiddler向路径“/baz”发送一个POST请求来访问Action方法Baz,我们将请求的主体内容设置为基于Result类型的JSON字符串,我们提供的IArgumentBinder对象利用发序列化请求主体的形式绑定其参数
Mvc中的JsonResult Asp.net mvc中默认提供了JsonResult来处理需要返回Json格式数据的情况。...一般我们可以这样使用: public ActionResult Movies() { var movies = new List(); movies.Add(new {...不包含成功失败信息:如果我们要判断请求是否成功,我们要手动通过获取json数据包的length获取。 返回的日期未格式化,在前端还需自行格式化输出。...:是否缩进(默认为false,即未格式化) 并在AbpController中重载了Controller的Json()方法,强制所有返回的Json格式数据为AbpJsonResult类型,并提供了AbpJson...总结 本节主要讲解了以下几个问题: Asp.net中JsonResult的实现。 ABP对JsonResult的再封装,支持指定大小驼峰及是否缩进进行Json格式化。
方式二:自动装配,在方法的参数位置,定义类型及参数名称,mvc会自动匹配相同名称的属性值,即匹配input的name与对象的属性相同名称的值。 ?...还可以完成自定义类型的参数的封装 ?...自动装配的要求:参数的名称或对象类型的属性必须与参数的键相同 返回结果 返回类型为ActionResult,是一个抽象类,需要返回具体类型的结果对象 直接或间接继承自ActionResult的类型 ViewResult...:使用View()可以指定一个页面,也可以指定传递的模型对象,如果没有指定的参数则表示返回与Action同名的页面。...RedirectResult:使用Redirect(string url)将结果转到其他的Action JsonResult:使用Json(object data) 将data序列化为json数据并返回
Asp.net MVC 抛弃了Asp.net WebForm那种高度封装的控件,让我们跟底层的HTML有了更多的亲近。可以更自由、更灵活的去控制HTML的结构、样式和行为。...Asp.net MVC可以更便捷的使用Ajax,本文针对开发过程中的技术进行了简单的总结并制作了一个小练习进行巩固。...1.准备工作 使用VS创建MVC应用程序,可以使用空模板,添加Home控制器以及对应的视图 使用NuGet进行包管理,添加Jquert、easyui等引用 2.开始制作Demo UI: ?...} string sss = s; return s; } /// /// 返回学生列表的...public string stuName { get; set; } public string stuGrad { get; set; } } } $.ajax的参数简单的说明如下
(ASP.NET Core 系列目录) 一、内容协商 依然以返回Book类型的Action为例,看看它是怎么被转换为JSON类型的。...如果返回类型为JsonResult、ContentResult、ViewResult等特定ActionResult,无论请求是否设置了accept标识,都会被忽略,会固定返回 JSON、String,Html...这是为了在使用不同浏览器使用 API 时提供更一致的体验。...由于是为了处理Book类型,在构造函数中添加了Book类型的参数,并将该参数赋值给属性Content。...注册之后,就可以通过在请求的Header中通过设置“accept: application/xml”来获取XML类型的结果了。
当然也可以单独使用kestrel作为web 服务器, 但是使用iis作为reverse proxy还是由很多有点的: 例如,IIS可以过滤请求, 管理证书, 程序崩溃时自动重启等....返回Status Code 目前我们返回的JsonResult继承与ActionResult, ActionResult实现了IActionResult接口....因为web api不一定返回的都是json类型的数据, 也不一定只返回一堆json(可能还要包含其他内容). 所以JsonResult并不合适作为Action的返回结果....结果的格式 asp.net core 2.0 默认返回的结果格式是Json, 并使用json.net对结果默认做了camel case的转化(大概可理解为首字母小写). ...设置header为xml后,返回的还是json, 这是因为asp.net core 默认只实现了json.
使用ASP.NET MVC做开发时,经常需要在页面(View)和控制器(Controller)之间传递数据,那么都有哪些数据传递的方式呢?...获取路由参数的另外一种方式是给Action设置一个和路由模板中指定的参数名一致(不区分大小写)的参数即可,代码如下: public void GetValue(int id) { } 注意,这里不仅获取了路由数据...username, int age) { } 在Action中成功获取到了对应的参数值,且数据类型也根据Action中参数的类型进行了相应的转换。...Json public ActionResult Index() { return View(); } public JsonResult SendData() { return Json...ExpandoObject 上面提到,直接使用匿名类型向View中传递数据是行不通的,可以使用ExpandoObject类型对象来替代匿名类型 public ActionResult Index() {
领取专属 10元无门槛券
手把手带您无忧上云