jquery ajax调用JsonResult控制器方法在IIS6上调用404

今天早上我一直在拔头发试图解决这个问题。

我对我的控制器上的jsonresult操作有一个简单的jquery json请求。 当我在我的本地计算机(IIS7)上运行它时,它工作正常。 当我部署到运行IIS6的开发机器时,我收到404错误。

脚本:

$(function() { $('#search').click(function() { var zip = $('#zip').val(); $.ajax({ type: "GET", url: "/Customer/GetCityStateFromZip", data: { zipcode: zip }, contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { $("#stateList").setCityState(msg); } }); }); }); 

控制器:

 public JsonResult GetCityStateFromZip(String zipcode) { List list = new List(); foreach (var item in dt) { list.Add(new CityState(){City = item.City, StateCode = item.StateCode, StateName = item.StateName}); } return this.Json(list); } 

请求数据:

 GET /Customer/GetCityStateFromZip?zipcode=85215 HTTP/1.1 Host: mydevserver User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 Accept: application/json, text/javascript, */* Accept-Language: en-us,es-mx;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive X-Requested-With: XMLHttpRequest Referer: http://mydevserver/Customer/Entry 

响应数据:

 HTTP/1.1 404 Not Found Date: Wed, 30 Jun 2010 18:01:06 GMT Content-Length: 1635 Content-Type: text/html Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET 

在我运行IIS6的开发服务器上,我设置了一个通配符映射(C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll)并取消选中“validation该文件是否存在”。

我的MVC网站的所有其他方面都可以正常工作。 我在整个地方都使用jquery(validation,动画等)并且工作正常。 我似乎无法超越这个ajax问题。

我需要在IIS6机器上解决一些其他设置或映射问题吗? 也许IIS6不知道如何路由这个请求?

好吧,我在另一篇SOpost的帮助下弄清楚了。

问题在于传递了URL。 它显然不同于我的机器,以及我部署的服务器。 我很尴尬,我没有想到这一点。

我改变了$ .ajax调用:

 url: "/Customer/GetCityStateFromZip" 

对此,使用Url.Action到正确的完整路径:

 var url = '<%= Url.Action("GetCityStateFromZip","Customer") %>'; url: url 

一切都很好。

对于IIS 6中的无扩展URL,您需要通配符映射。 阅读此博客文章 ,了解有关设置的更多详细信息。