首页 / ASP.NET / ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中
ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3488字,纯文字阅读大概需要5分钟。
内容图文
![ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中](/upload/InfoBanner/zyjiaocheng/850/2d8fcdf1e13e4f5dab807eabefe77dc1.jpg)
我们在ASP.NET Core MVC项目中有如下HomeController:
using Microsoft.AspNetCore.Mvc; namespace AspNetCoreActionFilter.Controllers { public class HomeController : Controller { /// <summary> /// 显示一个网页供测试 /// </summary> public IActionResult Index() { return View(); } /// <summary> /// 返回一个Json对象到客户端浏览器 /// </summary> /// <returns>Json对象</returns> public IActionResult GetJson() { return Json(new { Message = "This is a GetJson message!" }); } } }
其代码非常简单,HomeController只有两个Action:
- Index这个Action,输出一个简单的网页供测试
- GetJson这个Action,输出一个Json对象到客户端浏览器
现在我们在浏览器上输入Url地址"Home/GetJson"来访问HomeController的GetJson这个Action,结果如下:
通过IE浏览器的开发者工具,我们看到,浏览器成功接收到了HomeController的GetJson这个Action返回的Json对象,其message属性值为我们在GetJson这个Action中返回的"This is a GetJson message!"。
然后我们定义一个IActionFilter拦截器叫MyActionFilterAttribute,利用IActionFilter的OnActionExecuted方法,我们可以在HomeController的GetJson这个Action方法执行后,替换GetJson方法返回的Json对象:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using System; namespace AspNetCoreActionFilter.Filters { /// <summary> /// 定义一个IActionFilter拦截器叫MyActionFilterAttribute /// </summary> public class MyActionFilterAttribute : Attribute, IActionFilter { /// <summary> /// IActionFilter.OnActionExecuted在Controller的Action方法执行完后执行 /// </summary> public void OnActionExecuted(ActionExecutedContext context) { //等Controller的Action方法执行完后,通过更改ActionExecutedContext类的Result属性,来替换Action方法返回的Json对象 context.Result = new JsonResult(new { Message = "This is a MyActionFilter message!" }); } /// <summary> /// IActionFilter.OnActionExecuting在Controller的Action方法执行前,但是Action方法的参数模型绑定完成后执行 /// </summary> public void OnActionExecuting(ActionExecutingContext context) { //Do something... } } }
但问题是当ASP.NET Core MVC执行IActionFilter的OnActionExecuted方法时,HomeController的GetJson这个Action方法返回的Json对象,是否已经被输出到Http Response中发送给客户端浏览器了呢?
我们将上面定义的IActionFilter拦截器MyActionFilterAttribute注册到HomeController的GetJson方法上:
using AspNetCoreActionFilter.Filters; using Microsoft.AspNetCore.Mvc; namespace AspNetCoreActionFilter.Controllers { public class HomeController : Controller { /// <summary> /// 显示一个网页供测试 /// </summary> public IActionResult Index() { return View(); } /// <summary> /// 返回一个Json对象到客户端浏览器 /// </summary> /// <returns>Json对象</returns> [MyActionFilter] public IActionResult GetJson() { return Json(new { Message = "This is a GetJson message!" }); } } }
然后再在浏览器中输入Url地址"Home/GetJson"来访问HomeController的GetJson这个Action,这次结果如下:
我们可以看到这次浏览器收到的Json对象是MyActionFilterAttribute拦截器中OnActionExecuted方法替换的Json对象,其message属性值为"This is a MyActionFilter message!",而HomeController的GetJson这个Action返回的Json对象根本就没有被浏览器收到,说明HomeController的GetJson这个Action返回的Json对象完全没有被输出到Http Response中发送给客户端浏览器。所以这很好地说明了ASP.NET Core MVC中IActionFilter拦截器的OnActionExecuted方法,会在Controller的Action返回的对象被输出到Http Response之前执行。
我们还可以在ASP.NET Core MVC中的.cshtml视图文件中写几个C#代码打上断点,在IActionFilter拦截器的OnActionExecuted方法中也打上断点,在Visual Studio调试中我们会发现,IActionFilter拦截器的OnActionExecuted方法的断点先被执行,然后才执行.cshtml视图文件中的断点,这也很清晰地证明了上面黑色粗体字的观点。
内容总结
以上是互联网集市为您收集整理的ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中全部内容,希望文章能够帮你解决ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。