介绍由于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库,为了完成我们的任务,我们需要的一切。见下面的代码示例:
我们使用{A},使我们的JSON服务方法异步POST请求。公告contentType和数据类型的属性,是负责确定,我们要求和期待的JSON格式的数据。 url属性定义了我们的JSON服务构建基于标准的ASP.NET MVC路由规则方法的URL。成功的参数值是请求成功完成时,将调用的回调函数的名称。输入参数很少的服务方法被调用不带参数。在一个或两个简单的参数的情况下,我们可以依赖于ASP.NET MVC的路由自动参数的映射功能,会自动从URL中提取参数,然后把它传递给服务方法。看看这个例子。<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>
假设我们想调用带有一个参数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框架返回一个值:
请,并做一些互联网搜索,以便更好地了解DateTime值的格式转换机制,在返回一个JSON格式的邮件时。结论在这篇文章中,我们已经学会了如何实现一个JSON服务使用ASP.NET MVC框架,以及如何调用JSON服务方法异步从JavaScript使用jQuery库。<script class="brush: javascript" type="syntaxhighlighter">
function toDate(dateValue) {
return eval('new' + dateValue.replace(/\//g, ' '));
}
</script>