Json得到404 Not Found

时间:2012-03-14 04:52:52

标签: c# asp.net asp.net-mvc json silverlight

在asp.net mvc应用程序中,我有一个方法可以将JsonResult返回给视图。它在我的本地机器上运行得很好,但是当应用程序部署在Web托管服务器上时,当我尝试通过点击视图的链接获取此数据时,我在Firebug中找到了404 Not Found。是否有人知道可能发生这种情况的可能原因?我的生成路径的代码片段如下:

    private void get_info()
    {
        var serviceUri = new Uri("/getcountrydata/" + country_name + "/" + arms[0].Name + "/" + arms[1].Name + "/" + arms[2].Name + "/" + arms[3].Name, UriKind.Relative);
        var webClient = new WebClient();
        webClient.OpenReadCompleted += openReadCompleted;
        webClient.OpenReadAsync(serviceUri);
    }

下面的Global.asax路由:

routes.MapRoute(
           "getcountrydata",
           "getcountrydata/{country}/{indicator1}/{indicator2}/{indicator3}/{indicator4}",
           new { controller = "Home", action = "getcountrydata" }
       );

getcountrydata方法如下:

public JsonResult getcountrydata(string country, string indicator1, string indicator2, string indicator3, string indicator4)
    {

       LegoData legoData = captainClimateRepostory.GetLegoData(country, indicator1, indicator2, indicator3, indicator4);

       DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(LegoData));
       MemoryStream ms = new MemoryStream();
       ser.WriteObject(ms, legoData);

       return Json(ms.ToArray(), JsonRequestBehavior.AllowGet);


    }

3 个答案:

答案 0 :(得分:3)

我认为您为该操作提供的网址存在问题。它与主机服务器无关。检查这个SO帖子..

jquery ajax call to JsonResult controller method results in 404 on IIS6

答案 1 :(得分:1)

在Silverlight内部,您可以构建相对于托管XAP的页面的URL:

Uri uri = new Uri(HtmlPage.Document.DocumentUri, "../getcountrydata/");

更好 - 相对于您的XAP:

Uri uri = new Uri(App.Current.Host.Source.AbsoluteUri, "../getcountrydata/");

此处提供更多信息:http://weblogs.asp.net/lduveau/archive/2009/03/13/get-silverlight-xap-and-hosting-page-url.aspx

答案 2 :(得分:0)

Tanveer-Ibn- Haresh是正确的 - 您正在提供一个URL假定应用程序正在根运行。我的教程[使用DropDownList框和jQuery] [1]   [1]:http://www.asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc显示了如何正确执行此操作。

  1. Fiddler会立即向您显示问题。
  2. 您应该在部署之前使用IIS在本地进行测试。