MVC5后台C#无法访问网络共享目录的解决办法

开发环境:

vs2015,C#,MVC5

做了一个简单的网站,其重点是后台需要访问其它电脑上的共享目录,在调试的时候一切正常,发布版本之后,在服务器上无法正常访问。这个问题在之前也遇到过两次,今天还是需要解决这个问题才行,因为后面碰到这种情况会越来越多。

通过搜索,找到了一个网址:https://www.cnblogs.com/knowledgesea/p/5145087.html

我看了这篇文章,大致思路就是先建立虚拟目录,然后通过虚拟目录来访问。按照这个办法操作,结果发现失败,在iis管理器中,建立的虚拟目录是可以打开的,但在后台代码中仍然无法访问:

建立虚拟目录:804_d1,对应的网络目录为:\\19.8.0.4\video,访问如下:

string vPath = @"\\804_d1\\2021\\3";
if (Directory.Exists(vPath))
{
    WriteLog("目录可以访问");
}
else
{
    WriteLog("目录访问失败");
}

实际打印出来的是“目录访问失败”,vPath去掉前面的@也是一样,也就是说,@没有起到作用。参考那个网址,加上了个MapPath():

string vPath = @"\\804_d1\\2021\\3";
vPath = Server.MapPath(vPath);
if (Directory.Exists(vPath))
{
    WriteLog("目录可以访问");
}
else
{
    WriteLog("目录访问失败");
}

结果是一样的,另外发现,通过MapPath()之后,返回的路径就变成了正常的网络路径:\\19.8.0.4\video\2021\3,这样说,这个虚拟路径就没有任何意义了,就是因为像 “\\19.8.0.4\video\2021\3” 这样的网络路径无法访问,才要创建虚拟路径,现在倒好,又把虚拟路径转换成了网络路径。

实在没辙,仔细查看那个网址,发现最后部分有一段,是要在配置文件里加上配置项,位置:在网站根目录下的配置文件web.config中,在节点 configuration/system.web 下添加访问共享目录的用户信息:

<identity impersonate="true" userName="username" password="pwd" />

这样添加之后,

string vPath = @"\\804_d1\\2021\\3";
if (Directory.Exists(vPath))
{
    WriteLog("目录可以访问");
}
else
{
    WriteLog("目录访问失败");
}

成功打印了“目录可以访问”,再试一下直接访问网络路径:

string vPath = "\\\\19.8.0.4\\video\\2021\\3";
if (Directory.Exists(vPath))
{
    WriteLog("目录可以访问");
}
else
{
    WriteLog("目录访问失败");
}

发现也是成功的,打印了“目录可以访问”,这样来看,那虚拟目录还有用吗?我把虚拟目录804_d1删除掉,仍然直接访问网络路径,发现还是成功。

如此来说,得出的结论就是:在配置文件中添加访问共享目录的用户名和密码即可,其它乱七八糟的事情统统不需要。

 

有关ASP.NET的各种配置项参考:https://docs.microsoft.com/zh-cn/previous-versions/dotnet/netframework-4.0/9k6k3k4a(v=vs.100)

后记:

配置中的用户名,需要是系统的用户名,也就是说,在本地也需要建立要访问共享目录的用户帐号,如果没有建立这个帐号,在启动/访问网站时,会提示如下错误:

这个错误是我在F5启动调试的时候,浏览器上提示的,所以这个用户信息非常重要,一旦没有设置好,被用户看到用户名和密码就不好了,可以仔细参考
identity 元素(ASP.NET 设置架构) | Microsoft Docs 来设置一个安全的策略(我还没有设置,后面有空了再来弄这个事)

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值