【问题标题】:How to simiulate a JSON call from an HTTP GET Call?如何从 HTTP GET 调用模拟 JSON 调用?
【发布时间】:2010-11-25 22:48:42
【问题描述】:

此时我正在以两种方式之一调用我的索引视图。使用普通的 http 视图并将其序列化为 JSON。为了测试它,我使用下面的代码,它可以工作。我想通过 http get 调用来获取它。喜欢(http://localhost/article,json 或类似的东西。任何想法。

$.getJSON("/Article", function(json) {
  $.each(json, function(i, article) {
    alert(article.title);
  });
});

此时,调用 /article 的索引正在使用以下 IsAjaxRequest 方法进行区分。但我真正的问题是我是否能够绕过 JQuery 中的 .getJSON 方法来测试以下代码。

if (Request.IsAjaxRequest()) {
  return Json(articles);
} else {
  return View(articles);
}

【问题讨论】:

    标签: asp.net-mvc model-view-controller json


    【解决方案1】:

    如果您尝试为完整的 GET(页面加载)和 AJAX 调用(通过 getJSON)重用相同的操作方法,您会遇到问题,因为每个操作方法都应该有一个唯一的名称。否则,当请求特定 Url 时,MVC 引擎无法判断应调用哪个操作方法。

    您需要两个单独的操作:一个用于返回 ViewResult 的完整页面加载,另一个用于返回 JsonResult 的 AJAX 调用。如果您需要这些操作的 Url 看起来相同,您还可以使用指向不同操作方法的映射路由。

    那么,怎么样:

    /文章/索引 映射到默认索引操作(全页加载)

    /文章/刷新 映射到 Refresh 操作(异步 JSON 调用)

    【讨论】:

      【解决方案2】:

      我不确定我是否正确理解了这个问题,但是你不能做一个名为“格式”的可选参数,以便你传入 ?format=json 来切换你返回的回复类型吗?

      if(Request.IsAjaxRequest() || (!string.IsNullOrEmpty(format) && format.Equals("json"))
      {
          ...
      }
      

      【讨论】:

        【解决方案3】:

        如果您想知道如何测试您的操作并且您正在谈论进行自动化测试,请查看this post 是否回答了您的问题。

        【讨论】:

          猜你喜欢
          • 2019-05-02
          • 1970-01-01
          • 2018-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-23
          相关资源
          最近更新 更多