ASP.NET MVC动作结果

在讲述动作结果之前我们先看看ASP.NET WebForms是如何处理响应的:

 

context.Response.Clear();

context.Response.ContentType = "text/json";

context.Response.Write(JsonConvert.SerializeObject(dict));

context.Response.End();

context.Response.Redirect("../Home/Index.html");

context.Response.End();

上述代码返回了一个JSON对象到前台,跳转到首页,这种办法是可行的,但它存在几个问题:

1. 后台要必须包含详细的URL或HTML代码,这让代码难以维护。

2. 将响应直接生成输出,会让测试难以进行,为了确保输出是什么,需要创建Response对象的模仿实现。

 

      幸好MVC的动作结果(Action Result)很好地解决了这个问题。它将“指明意图”和“执行意图”分开。首先MVC不会直接操作Response对象,而是返回一个实现了ActionResult类的对象,它描述控制器响应要完成的功能。例如:重定向,渲染一个视图,返回JSON。。

       当MVC框架从动作结果接收到一个ActionResult对象时,它调用由这个对象所定义的ExecuteResult方法。然后在该动作结果的实现中处理Response对象,生成复合你意图的输出。

 

这是JsonResult的部分底层代码,可以看到最终调用的是Response.write()返回JSON字符串:

JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
if (this.MaxJsonLength.HasValue)

 {
          javaScriptSerializer.MaxJsonLength = this.MaxJsonLength.Value;

 }
if (this.RecursionLimit.HasValue)
 {
           javaScriptSerializer.RecursionLimit = this.RecursionLimit.Value;
 }
response.Write(javaScriptSerializer.Serialize(this.Data));

 

你可能感兴趣的:(Web应用,ASP.NET)