返回首页

介绍由于ASP.NET Web服务以来,一直是任何专业的网站开发人员的工具集的重要组成部分。开始。NET 3.5 Web服务变得更加有用,因为它从浏览器使用JavaScript和ASP.NET AJAX异步调用Web服务成为可能。
但是在过去的两年替代ASP.NET MVC框架已经从发展社会越来越多的关注,由于其良好的MVC设计模式和坚持执行Web标准和尖端的网络技术。
对于许多经验丰富的ASP.NET开发人员习惯于用ASP.NET AJAX框架的一个自然的问题,特别是伴随着Web服务出现:如何实现与ASP.NET MVC框架,其自然的JavaScript同伴的jQuery类似的方法吗?ASP.NET MVC的JSON服务首先,有没有在ASP.NET MVC的Web服务的概念,但它是很容易实现其功能的模拟。任何控制器动作方法,返回数据,而不是一个HTML格式的页面可以被认为是一个Web方法模拟和相应的使用。从这点来看一组控制器动作方法,返回格式正确的JSON响应,我会打电话的MVC的JSON服务。下面是一个简单的例子:

<script class="brush: csharp" type="syntaxhighlighter">

public class JsonServicesController : Controller

{

  ...

  public JsonResult MyJsonMethod()

  {

      // ... acquire an instance of an object

      return Json(data);

  }

  ...

}

</script>

正确实施时,上述的代码应该返回一个JSON数据对象的代表性,是说明它是多么容易实现MVC JSON服务方法。安全默认情况下,一个JSON服务方法将抛出一个称为一个HTTP GET请求时的异常。这种行为是在按照一个普通的ASP.NET Web服务的方法,也不会接受一个GET请求的行为。这也被认为是最好的做法是调用一个JSON服务的方法,只能通过HTTP POST请求。为了实现[HttpPost]属性应适用于JSON的服务方法。如果您想了解有关安全方面的考虑
另一个需要考虑的是认证/授权。同样任何其他控制器的操作方法[授权]属性应用到JSON的服务方法的控制,该方法只能被称为一个适当的授权(如需要)的身份验证的用户。
校正JSON服务的方法,将看起来像这样:{C}如何使用jQuery调用一个MVC JSON服务方法JSON的服务最流行的应用之一,是他们从JavaScript中调用异步,然后使用返回的数据更新HTML内容。定期ASP.NET和ASP.NET AJAX这项工作会很容易地完成所有必要的JavaScript代码自动生成,并在页面上引用。然而,便利配备了更大的有效载荷和加载时间较长,许多额外的脚本必须在页面上引用的价格。
在ASP.NET MVC自然JavaScript环境是jQuery库,为了完成我们的任务,我们需要的一切。见下面的代码示例:
<script class="brush: javascript" type="syntaxhighlighter">

  function getMyObject(onSuccess) {

    $.ajax({

       type: "POST",

       contentType: "application/json;charset=utf-8",

       url: "/JsonService/MyJsonMethod",

       data: "{}",

       dataType: "json",

       success: onSuccess

    });

  }

</script>
我们使用{A},使我们的JSON服务方法异步POST请求。公告contentType和数据类型的属性,是负责确定,我们要求和期待的JSON格式的数据。 url属性定义了我们的JSON服务构建基于标准的ASP.NET MVC路由规则方法的URL。成功的参数值是请求成功完成时,将调用的回调函数的名称。输入参数很少的服务方法被调用不带参数。在一个或两个简单的参数的情况下,我们可以依赖于ASP.NET MVC的路由自动参数的映射功能,会自动从URL中提取参数,然后把它传递给服务方法。看看这个例子。
假设我们想调用带有一个参数quot JSON服务方法; idquot用来在服务器端获取数据对象。首先,我们将有一个相应的Global.asax.cs文件中定义的路由规则:{体C3}下一步,我们将有一个参数的JSON服务方法:{的C4}当我们调用我们的JSON服务方法使用quot这样的网址; JsonServices/MyJsonMethod/123456quot;该方法将接受一个字符串值quot; 123456quot作为id参数自动。
这很简单。现在,如果我们需要通过复杂的对象作为一个参数,我们不能使用URL?在这种情况下,我们只是传递一个JSON字符串作为一个较复杂的参数,在jQuery.ajax方法使用数据属性文字:{C5的}现在,我们需要修改我们的JSON服务的方法,为了得到正确的参数。{5233}我们需要定义如下所示的MyObject类:{C7-}请注意这个类是标记了[Serializable]属性和公共属性名称完全匹配的,我们在一个JSON参数字符串中使用jQuery.ajax函数调用。为ASP.NET MVC框架做幕后的所有工作,并提供我们的JSON服务的方法与正确的参数值,这仅仅是足够的。很容易看到这种异步的AJAX调用和定期的形式,唯一的区别是在客户端上的一个参数是一个JSON文本字符串提供的POST请求之间的相似性。耗时返回的数据我们的最终目标是要接收的数据,我们就能消耗由JavaScript的JSON格式的一块,我们希望通过我们的努力,充分利用ASP​​.NET MVC框架和jQuery库的能力,以尽量减少。到目前为止,我们已经成功地使一个请求到服务器端JSON服务的方法,下一步就是要消耗返回的数据。我们提供的onSuccess JavaScript函数作为回调到jQuery.ajax方法,我们应该为所有的数据处理,我们要使用它。{C8的}当AJAX请求完成的onSuccess函数被调用和接收参数数据,这是我们预期的结果。数据已经是一个普通的JavaScript对象,已经从一个JSON字符串反序列化,我们可以使用如预期。它完全对应一个服务器端的数据对象,我们已经从一个JSON服务方法返回。请注意,而不是一个普通的Web服务呼叫使用ASP.NET AJAX返回的对象是不是在quot包裹; dquot属性,因此也没有额外的处理需要。一个字左右的DateTime如果返回的对象包含一个DateTime类型的属性的MVC框架,它​​需要一些客户端上的初步处理之前可以消耗在一个特定的形式返回。下面一个简单的函数转换成一个标准的JavaScript Date对象的MVC框架返回一个值:
<script class="brush: javascript" type="syntaxhighlighter">

  function toDate(dateValue) {

      return eval('new' + dateValue.replace(/\//g, ' '));

  }

</script>
,并做一些互联网搜索,以便更好地了解DateTime值的格式转换机制,在返回一个JSON格式的邮件时。结论在这篇文章中,我们已经学会了如何实现一个JSON服务使用ASP.NET MVC框架,以及如何调用JSON服务方法异步从JavaScript使用jQuery库。

回答

评论会员:albsilva_m2u 时间:2012/02/04
尼斯和有益的职位,但如果你的类继承自第三方或系统类,像UserControl的,未标记为virtual Dispose方法,你将如何实现Dispose方法继承类
:克里斯托弗・凯勒
评论会员:游客 时间:2012/02/04
您好,对不起,迟了回应,我是在这天假期{S0的}在第三方/系统类的情况下,我会尝试以这种方式实现IDisposable:{C10的}IDisposable接口,如果在基类中尚未落实,我会在默认的方式实现的接口(在文章的第一个例子所示)。上面的例子中的任何异议?请让我知道,我不是一个IDisposable的专家和想学习的东西{S}有一个很好的一天,总是很高兴的编码,克里斯新的URL缩短器取消:{A3的}检查出我的网站{A4纸}