今天想把最近几天写的mvc4小demo挂在iis上,结果引发了一系列问题,还好一一解决最终ok了。
首先遇到的是我没有注册.net 其实我们只要在command里面cmd进入找到 C:WindowsMicrosoft.NETFramework64v4.0.30319aspnet_regiis.exe -i 回车就弄好了,注意你要注册的.net路径是否正确。
其次发现我发布好的项目Browse时候发现报错说找不到system.web.httphost.dll文件,我去bin里看一下真的没有这文件好吧老实找个文件copy进去吧,不过注意version必须匹配一致,
接着弄好了一个又来了一个system.web.http.dll 也没有加载到,已查看bin里的确也没有再次加入,再运行又发现又有缺失dll这次是System.Net.Http.Formatting.dll。我接着copy进去。
最后成功了。
公司把所有website都放在默认网站下了,其实这样很不好,没有办法我也按规矩放吧。安全不用我去考虑,好吧放到里面有引发一系列问题,什么原因呢。mvc项目大家都知道不需要指定到某一个login.aspx
就可以直接连接。因为我们用的是mvc,估计大家都会在配置文件里写:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
这句话就是让iis可以允许所有类型请求。可是我们很多网站都挂在了默认网站下公用80port,只是每一个项目一个自己的文件夹。这样对我们controller跳转时候有影响,举个例子
我们正常是'/Home/GetNRIC'这种请求action可是我们放在默认网站下就多了一层文件夹当请求时就有可能找不到action。所以为了可以改吧:
var path = window.document.location.pathname.substring(0, window.document.location.pathname.substr(1).indexOf('/') + 1); var data = { "NRIC": $('#fmNRIC input').val() } $.ajax({ url: path + '/Home/GetNRIC', type: 'post', data: data, success: function (ret) { $('#Fname').text(ret.FName); $('#Pname').text(ret.NamePrint); $('#IC').text(ret.NRIC); if (ret.Sex == "M") { $('#Sex').text("Male"); } else if (ret.Sex == "F") { $('#Sex').text("Female"); } else { $('#Sex').text("Unknown"); } $('#Block').text(ret.Block); $('#Street').text(ret.Street); $('#Floor').text(ret.Floor); $('#UnitNo').text(ret.UnitNo); $('#Building').text(ret.Building); if (ret.PdfUrl != "") { $('#dv_pdf').show(); LoadPdf("../NRIC/" + ret.PdfUrl); } else { $('#dv_pdf').hide(); } }, error: function () { } });
我用了path加在了url前面这样就可以正确找到我想要的action里了。
完成任务!