这令我感到困惑.我将一个MVC 2应用程序部署到IIS6,除了我的jqGrid调用以获取数据之外,一切正常.
一切都在我的开发机器上,但这里是我正在使用的两个URL
本地开发Web服务器:
POST http://localhost:port/Ctrl.mvc/JsonMethod
IIS6(注意https – 不确定是否重要)
POST https://www.domain.com/AppName/Ctrl.mvc/JsonMethod
后一个URL导致HTTP 404,这真的令人困惑,因为它在我的本地机器上运行良好.使用[AcceptVerbs(HttpVerbs.Post)]正确声明JsonMethod
如果需要更多信息,请告诉我 – 我感谢您的任何帮助!
编辑相当疏忽我…
我的所有JSON请求都是/Ctrl.mvc/JsonMethod.好吧,在IIS服务器上,代码位于子文件夹–AppName中.因此,我得到404,因为找不到https://domain/Ctrl.mvc/JsonMethod – 这是正确的.
基本上,我需要在部署时更改我的JSON请求 – 我真的不喜欢,但也许有更好的方法?
解决方法
看看
Deploy asp.net mvc beta to iis 6 causing 404’s和
http://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/.
您的应用程序中是否有更多使用POST的URL?它们有效吗?你有没有像.aspx或.mvc这样的扩展名的网址吗?它们有效吗?
更新:我在像你这样的所有JavaScripts中遇到了我的URL的不同基本/根部分的问题.因为你使用jqGrid,我认为你有同样的问题.如果我在Web服务器上的虚拟目录中发布我的解决方案,那么所有调用我的JavaScripts的URL都将被更改.所以我给window.location.pathname并用’/’拆分,然后我发现一个新的rootPath对应于新的位置.这种重新定位的URL我放在一个函数中,我在我的解决方案的所有JavaScripts中调用.租用的代码片段与我的网站完美配合:
var pathArray = window.location.pathname.split( '/' ); var rootPath = ''; for (var i = 0; i < pathArray.length; i++) { var p = pathArray[i]; if (p === "") { continue; } if (p.toLowerCase() !== 'home') { rootPath += '/'; rootPath += p; } else { break; } } this.urlBase = rootPath + '/Repository.svc'; this.urlExportBase = rootPath + '/ExportToExcel';