关于.NET MVC4 Action 方法返回JsonResult和返回String类型的区别

 我来答
langmanxue
2016-08-14 · 超过83用户采纳过TA的回答
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:102万
展开全部
让ASP.NET MVC页面返回不同类型的内容
在ASP.NET MVC的controller中大部分方法返回的都是ActionResult,更确切的是ViewResult。它返回了一个View,一般情况下是一个HTML页面。但是在某些情况下我们可能并不需要返回一个View,我们可能需要的是一个字符串,一个json或xml格式的文本,一个图片。
ActionResult是一个抽象类,我们平时比较常用的ViewResult是它的派生类,所以我们也可以写一个StringResult、XmlResult、ImageResult来实现上面提到的需求。由于返回字符串可以有更简单的方法,直接将需要返回字符串的方法的返回值设置成string型就可以了,JsonResult在ASP.NET MVC中已经有提供。所以下面只演示XmlResult和ImageResult。
ASP.NET MVC项目是开源的(可以在http://www.codeplex.com/aspnet下载源代码),所以我们可以参考其中ViewResult和JsonResult的代码进行改写。主要的思路是设置返回数据流HTTP Header中的Content-Type,然后将要返回的内容写入Response中。

先演示XmlResult
XmlResult的代码:

1 public class XmlResult:ActionResult
2 {
3 // 可被序列化的内容
4 object Data { get; set; }
5
6 // Data的类型
7 Type DataType { get; set; }
8
9 // 构造器
10 public XmlResult(object data,Type type)
11 {
12 Data = data;
13 DataType = type;
14 }
15
16 // 主要是重写这个方法
17 public override void ExecuteResult(ControllerContext context)
18 {
19 if (context == null)
20 {
21 throw new ArgumentNullException("context");
22 }
23
24 HttpResponseBase response = context.HttpContext.Response;
25
26 // 设置 HTTP Header 的 ContentType
27 response.ContentType = "text/xml";
28
29 if (Data != null)
30 {
31 // 序列化 Data 并写入 Response
32 XmlSerializer serializer = new XmlSerializer(DataType);
33 MemoryStream ms = new MemoryStream();
34 serializer.Serialize(ms,Data);
35 response.Write(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
36 }
37 }
38 }
在controller中调用它
1 public ActionResult Xml()
2 {
3 // 创建一个DemoModal对象,No属性为1,Title属性为Test
4 DemoModal dm = new DemoModal() { No = 1, Title = "Test" };
5
6 // 序列化为XML格式显示
7 XmlResult xResult = new XmlResult(dm, dm.GetType());
8 return xResult;
9 }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式