.NET MVC之ActionResult

.NET MVC之ActionResult

ActionResult是所有Controler返回值的父类。各种结果都是由ActionResult包装后发往客户端的。

继承结构

从基层结构上来划分,基本上可以分为四类。视图类、文本类、文件类和状态码类。

视图类返回结果

先从我们最熟悉的视图类来说起。View()与PartialView()它们分别返回ViewResult和PartialViewResult。从我们第一次接触到.NET MVC开始就在用。作用就是将处理好的数据交给视图引擎(如果有的话),来渲染视图。

返回值 帮助方法 描述
ViewResult View 渲染一个网页视图
PartialViewResult PartialView 渲染一个网页视图,但不使用布局页

一般我们为每个action创建的视图都是部分视图,里面只包含了一个网页中的一部分。View()在渲染完视图后会将结果嵌入在布局页中,返回网页的全部,而PartialView()在渲染完之后就直接将结果发送给了客户端。

文本类返回结果

返回值 帮助方法 描述
ContentResult Content 返回一段字符串文本,文本的内容格式用户可通过MIME指定
JsonResult Json 将数据序列化成JSON,之后返回给客户端
JavaScriptResult JavaScript 返回一段JavaScript格式的字符串

Content()

使用Content()方法和直接返回一个string字符串没什么区别,只不过你可以通过Content()指定一下返回内容的格式(XML或HTML等)与字符编码。

  1. public string Content()
  2. {
  3. return "<h1>HelloKitty</h1>"; //浏览器显示 HelloKitty
  4. }
  5. public ActionResult Content2()
  6. {
  7. //return Content("<h1>GoodbyeKitty</h1>"); //浏览器显示 GoodbyeKitty
  8. //指定返回文本的格式与字符编码
  9. return Content("<h1>GoodbyeKitty</h1>", "text/html",System.Text.Encoding.UTF8);
  10. }
  11. //效果都是一样的

Json()

传入一个任意类型的对象,尽可能地将它格式化为JSON格式。我试过基本上任何类型的对象都可以进行格式化,只不过对于文件或图片这类东西格式化之后只是一大堆没用的乱码。

普遍来说,Dictionary这种键值对类型会被转换成js类,List这类会被转换成js数组。

  1. class Student
  2. {
  3. public string Name { get; set; }
  4. public int Age { get; set; }
  5. }
  6. public ActionResult JSON1()
  7. {
  8. var array = new List<Student>();
  9. array.Add(new Student { Name = "小明", Age = 12 });
  10. array.Add(new Student { Name = "小李", Age = 15 });
  11. return Json(array,JsonRequestBehavior.AllowGet); //JsonRequestBehavior用于指定是否允许GET方式访问,默认只允许POST
  12. //运行结果:[{"Name":"小明","Age":12},{"Name":"小李","Age":15}]
  13. }
  14. public ActionResult JSON2()
  15. {
  16. //也可使用匿名内部类来保存数据
  17. return Json(new { name = "test", age = 16, sex = "boy" }, JsonRequestBehavior.AllowGet);
  18. //运行结果:{"name":"test","age":16,"sex":"boy"}
  19. }

JavaScript()

JavaScript()直接返回一个JavaScript代码字符串。JavaScript()的效果实际上和Content()是一样的,只不过JavaScript()会自动指定返回文本的内容是application/x-javascript。

  1. public ActionResult JS()
  2. {
  3. return JavaScript("alert(‘" + DateTime.Now.ToLongTimeString() + "‘)");
  4. }
  5. public ActionResult JS2()
  6. {
  7. return Content("alert(‘" + DateTime.Now.ToLongTimeString() + "‘)", "application/x-javascript");
  8. //这样写效果和上面完全是一样的
  9. }
  10. /*
  11. <!DOCTYPE html>
  12. <html lang="en">
  13. <head>
  14. <meta charset="UTF-8">
  15. <script src="http://localhost:5695/home/js2"></script>
  16. <!--可以直接在script标签中填写action的地址-->
  17. </head>
  18. <body></body>
  19. </html>
  20. */

文件类返回结果

Controler中可以用于返回文件的方法也就只有File()。File()可以通过多种形式来发送文件,可以通过文件名、二进制Byte[]、Stream流。发送时还需要通过MIME标明一下文件类型。

  1. public ActionResult FILE1()
  2. {
  3. System.IO.Stream fs = System.IO.File.OpenRead(@"test.png");
  4. return File(fs, @"image/png"); //通过流的方法
  5. }
  6. public ActionResult FILE2()
  7. {
  8. return File(@"test.png", @"image/png"); //通过文件名的方式
  9. }
  10. public ActionResult FILE3()
  11. {
  12. System.Drawing.Bitmap b = new System.Drawing.Bitmap(100, 100); //创建一张空白图片
  13. System.IO.MemoryStream ms = new System.IO.MemoryStream();
  14. b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
  15. byte[] bytes = ms.GetBuffer();
  16. return File(bytes, @"image/bmp"); //通过二进制数据的方式
  17. }
  18. /*
  19. //现在可以直接将地址赋值给img标签来进行显示了
  20. <img src="http://localhost:5695/home/file1" >
  21. */

注意:返回的文件不要太大,否则会造成内存溢出。如果要下载大文件,最好就直接返回文件地址。

实现防盗链

如果只是简单的返回一个文件就太没有意思了。通过控制器来返回文件相对于直接将文件地址给用户而言,我们可以进行一些处理操作,比如只允许登陆过的用户查看此图片,或者在图片上添加水印。

  1. public ActionResult FILE1()
  2. {
  3. if (HttpContext.User.Identity.IsAuthenticated)
  4. //如果用户登录了才显示图片
  5. return File(@"test.png", @"image/png");
  6. else
  7. //没有登录就显示一张防盗链图片
  8. return File(@"test.png", @"image/png");
  9. }

实现验证码

通过动态生成一张图片返回给客户端。具体步骤可以参考我这篇博文.NET MVC 验证码

状态码类返回结果

返回值 帮助方法 描述
RedirectResult Redirect 返回一个HTTP 302状态码,使客户端浏览器跳转到指定的URL
RedirectToRouteResult RedirectToAction 返回一个HTTP 302状态码,使客户端浏览器跳转到指定的action
RedirectToRouteResult RedirectToRoute 跳转到指定的URL,这取决于路由API
HttpStatusCodeResult (None) 返回一个特定的HTTP 状态码与描述
HttpUnauthorizedResult (None) 返回一个HTTP 401状态码,提示用户未登录
HttpNotFoundResult HttpNotFound 返回一个HTTP 404状态码,提示用户访问的资源不存在
EmptyResult (None) 返回一个HTTP 200状态码表示请求成功,但不包含任何信息

如果action返回结果为null,Controler会自动将null替换为EmptyResult。

时间: 2025-01-14 03:04:56

.NET MVC之ActionResult的相关文章

Asp.net MVC 之 ActionResult

Action运行完后,回传的值通过ActionResult 类别或者其衍生的类别操作.ActionResult是一个抽象类,因此,Asp.net MVC 本身就实作了许多不同类型的ActionResult的子类别. ActionResult 子类以及说明: 常用的ViewResult用来回传一个View,即HTML的页面内容: PartialViewResult用来回传一个View,但是这个View是PartialView: RedirectResult用来将网页转向其他的网址: EmptyRe

MVC之ActionResult

一.所有的Controller都继承自System.Web.Mvc.Controller 目前ASP.NET MVC3默认提供了多种ActionResult的实现,在System.Web.Mvc命名空间里. 其中ActionResult是一个抽象类,所有一下的Result都继承自它,因此如果一个Action的返回值是ActionResult的话,可以返回以下任意一种类型的值,但是如果限制死了返回值为以下任意一种Result,则只能够返回指定的类型的数据了. ContentResult Empty

asp.net mvc之ActionResult

Web服务器接收到一个客户端请求以后,会对请求予以相应,而这个响应是通过Response来控制的, 但是在asp.net mvc 里,这部分的工作是由ActionResult来完成的, ActionResult是一个抽象类,所以具体的工作还是由很多个子类来完成, 具体的子类有 EmptyResult, ContentResult (通过Content,ContentEncoding,ContentType 分别设置返回的内容,字符编码格式以及媒体类型), FileResult(FileConte

C# MVC 自定义ActionResult实现EXCEL下载

前言 在WEB中,经常要使用到将数据转换成EXCEL,并进行下载.这里整理资料并封装了一个自定义ActionResult类,便于使用.如果文章对你有帮助,请点个赞. 话不多少,这里转换EXCEL使用的NPOI.还是用了一下反射的知识,便于识别实体类的一些自定义特性. 一.自定义一个Attribute using System; namespace WebSeat.Entity.Member.Attributes { /// <summary> /// 说明:Excel属性特性 /// 创建日期

ASP.NET MVC 中 ActionResult

ActionResult 是一个抽象(abstract)类,ViewResult 只是ActionResult 的一个实现(implementation).如果你确认你返回的是一个视图(view),你可以直接返回类型为ViewResult.ActionResult 有很多的派生类,如果你很确定你要返回的类型,你可以明确的返回该类型.如果你并不是很清楚,或者你根本不想去理解这些东西,你可以直接返回这些派生类的基类:ActionResult .

MVC 返回ActionResult 类型

1. Content() 返回文本类型,比如"Hello World!". 2.File() 返回文件类型,如PDF,JPG. 3.HttpNotFound() 返回404 HTTP 状态码. 4.JavaScript() 返回Javascipt 内容. 如 function test(){alert('Hello World');} 5.Json() 返回JSON 数据. 6.PartialView() 返回部分视图内容. 7.Redirect() 返回一个包含 302 跳转状态值,

ASP.NET MVC中ActionResult的不同返回方式

1.返回视图 return View();//返回方法名对应的视图 return View("aaa");//返回名称为aaa的视图 2.返回文本内容 return Content("hello world"); 3.返回重定向 return Redirect("https://www.baidu.com"); return Redirect("~/Test/1.html"); return RedirectToAction(

MVC中几种常用ActionResult

一.定义 MVC中ActionResult是Action的返回结果.ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回字符串等.ActionResult是一个抽象类,它定义了唯一的ExecuteResult方法,参数为一个ControllerContext,下面为您介绍MVC中的ActionResult 的用法 二.什么是ActionResult ActionResult是控制器方法执行后返回的结果类型,控制器方法可以返回

MVC ActionResult派生类关系图

态度决定一切,我要改变的不仅仅是技术,还有对待事情的态度! 先上个图: 由上图可知,ActionResult为根节点,其下有很多子节点!下面简单介绍下: MVC中ActionResult是Action的返回结果.ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回字符串等.ActionResult是一个抽象类,它定义了唯一的ExecuteResult方法,参数为一个ControllerContext,下面为您介绍MVC中的A