代码之家  ›  专栏  ›  技术社区  ›  Geo

如何从http get调用模拟json调用?

  •  0
  • Geo  · 技术社区  · 15 年前

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

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

    此时,调用to/article的索引与下面的isajaxrequest方法不同。但我真正的问题是,我是否能够绕过jquery中的.getjson方法来测试以下代码。

    if (Request.IsAjaxRequest())
                {
                    return Json(articles);
                }
                else
                {
                    return View(articles);
                }
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   David Andres    15 年前

    如果您试图对完整get(页面加载)和ajax调用(通过getjson)重用相同的操作方法,则会遇到问题,因为每个操作方法都应该有一个唯一的名称。否则,mvc引擎无法判断在请求特定url时应调用哪个操作方法。

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

    那么,如何:

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

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

        2
  •  0
  •   Runeborg    15 年前

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

    if(Request.IsAjaxRequest() || (!string.IsNullOrEmpty(format) && format.Equals("json"))
    {
        ...
    }
    
        3
  •  0
  •   Community c0D3l0g1c    7 年前

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