之前写了一篇快速部署Asp.net MVC3/4/5项目的文章,链接:https://blog.youkuaiyun.com/qq_32025005/article/details/80166374
无需复杂的iis配置,甚是舒爽。但是对于iis的基础知识还是需要有所补充,否则是知其然而不知其所以然。搜索相关文章,转载一篇还不错的理论性文章,加深对Asp.net MVC部署的理解。
需求前言:最近会经常修改一些网站前端的内容,为了方便跟UI和产品交流,需要将自己修改过的页面及时发布到测试机或者是本地的IIS上。而为了熟悉IIS的一些应用,所以先将项目发布在了本地IIS上,这其中遇到了一些问题,现在解决之后,就记录下来,留待后用。
流程图:
这里如何启用并配置IIS就不多说了,主要想记录下来的是在试运行过程中所遇到的一些问题。
配置IIS的几个关键点:
1.URL重写模块,这个以前是ISAPI筛选器的功能,后来好像就改版了,都成模块化设计了。(URL rewrite 下载链接)
2.ASP.NET MVC项目有路由机制,所以不需要用到IIS中默认文档功能以及目录浏览功能。
3.记得检查应用程序池的 .NET Framework版本,配置成v4.0版本。
4.身份验证上一般不用管,IIS默认使用的是“匿名身份验证”。
三大问题
1.试运行时无法正常访问网站,报错如下:
错误摘要
HTTP 错误 403.14 - Forbidden
Web 服务器被配置为不列出此目录的内容。
主要原因本地项目的web.config 文件出错,缺少一行代码,补上就好,代码如下:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
- 1
- 2
- 3
附上参考链接:点我
2.上面这个问题解决后,再次运行报CS0016未能写入输出文件错误,这里的问题是IIS所对应的组或用户没有访问本地文件夹C:\Windows\TEMP的权限,进入到temp文件夹的属性窗口的安全选项卡,进行修改。
3.来自项目本身,这个涵盖面就很广了。我遇到的主要是两个方面的问题:
3.1 来自JS文件的逻辑判断,用到了 documen.domain属性,可以用该属性获得当前的URL中的服务器名称或是IP地址,以此来进行判断,运行网站的当前用户是否合法。
3.2 来自对网站中各个URL入口的设置。这里有个背景交代:在线下调试时URL中的服务器名称一般都是 “localhost:端口号”,而在线上则会替换成相应的域名,为了修改方便,有以下的设置方式:
web.config 文件中:
<appSettings>
<!--域名-->
<add key="Domain" value="http://localhost:7676"/>
<add key="Host" value="localhost"/>
</appSettings>
- 1
- 2
- 3
- 4
- 5
某静态类中:
public static partial class WebUIHelper
{
public static readonly string dominUrl = ConfigurationManager.AppSettings["Domain"];
}
- 1
- 2
- 3
- 4
某页面中:
@{
var hostUrl = WebUIHelper.dominUrl;
}
<a href="@(hostUrl)/***/">
- 1
- 2
- 3
- 4
综上 发布到IIS上时记得 修改web.config文件。
结语
1.全栈工程师是很厉害的。全栈工程师=基础知识深厚+完善的机器模型+计算机网络+各种前后端语言。
2.不想了解产品逻辑的程序员当不了一名合格的工程师。
转载自:https://blog.youkuaiyun.com/KingArthur_Tao/article/details/77043413