在asp.net web项目开发中,有时候会涉及到虚拟目录的问题,使用虚拟目录功能映射一个非项目内的文件夹实现文件共享,这个功能在IIS中很好实现,鼠标右键“添加虚拟目录”然后添加虚拟文件夹的目录名称和实际物理路径之后即可完成。
废话少说,直接上解决方案
假设需求:访问example.com\userfiles\avater.jpg
项目里不存在userfiles这个文件夹,需要使用D:\web\files\avater.jpg这个文件
1. 首先需要解决MVC的路由问题,让指定的某个网站目录不要走路由,在RouteConfig.cs中加入如下路径忽略代码
routes.IgnoreRoute("userfiles/{*pathinfo}");
注意不要写成"/userfiles/{*pathinfo}",会报错提示不能使用/开头。
经过以上的步骤,MVC应用程序在接受到访问/userfiles/*的请求时就会绕过路由直接访问userfiles目录,而不是去找userfiles这个controller了。
2. 设置目录映射,如果是在IIS中运行的,按文件开头提示的方法添加虚拟目录即可。
但是如果是在IIS Express中,则需要手动编辑IIS Express的applicationhost.config文件,具体文件路径根据你所使用的操作系统而定,win10的路径在C:\Users\User\Documents\IISExpress\config,将User替换成当前用户,此处涉及windows的使用不多讲。
使用文本编辑器(notepad++,UEditor,记事本都行),打开applicationhost.config文件,在<sites></sites>节点中找到你的MVC web应用的节点,在<application></application>内添加以下文
将path的值设置为网站目录,physicalPath的值设置为所需要的映射的实际物理路径即可。
<virtualDirectory path="/userfiles" physicalPath="D:\web\files" />
至此,Done。