使用WebClient获取内网文件

Using WebClient to get a intranet files

在我们公司内网有一台服务器,负责存储文件。最初,服务器只能在内网环境中运行,但现在需要与外部网络应用程序共享文件。使此服务器可从 Internet 访问不是一种选择。

我想创建一个 ASP.NET MVC 解决方案,它使用 WebClient 从内联网服务器获取这些文件,并通过外部应用程序的 FileResult 将它们发回给用户。该客户端将提供自定义域用户凭据。到目前为止,我已尝试创建 CredentialCache class,设置正确的凭据并将其附加到 WebClients Credentials 属性,如以下代码所示:

public ActionResult Download(int id, string fileName)
{
    var fileService = new FilesService();
    var documentUrl = fileService.GetUrlFileByFileId(id);
    string filePath = "http://my.intranet.com/" + documentUrl;
    var fileNameFromUrl = filePath.Substring(filePath.LastIndexOf("\") + 1);
    byte[] filedata;

    CredentialCache cc = new CredentialCache();
    cc.Add(new Uri("http://my.intranet.com/"),
       "ntlm",
        new NetworkCredential("myUserName", "myPassword", "myDomain"));

    using (var client = new WebClient())
    {
        client.Credentials = cc;
        filedata = client.DownloadData(filePath);
    }

    string contentType = MimeMapping.GetMimeMapping(filePath);

    var cd = new ContentDisposition
    {
        FileName = fileName,
        Inline = false
    };

    Response.AppendHeader("Content-Disposition", cd.ToString());

    return File(filedata, contentType);
}

根据 Domain credentials for a WebClient class don't work 中发布的问题,它应该有效,但事实并非如此。只有当我 运行 在本地主机上出现问题时才会 运行ning,但是当我在测试服务器上发布我的解决方案时,它 return 401 错误。我的问题是如何让它工作?是否可以通过这种方式下载文件?

更新--- 我已经在另一台服务器上发布了我的测试应用程序,它开始工作了。现在测试应用程序位于另一台服务器上,而不是存储文件的服务器上。知道为什么当两者都在同一台机器上时它不起作用吗?

401错误是未经授权的,所以问题可能与权限有关。您确定用于登录该文件夹的用户帐户具有正确的访问权限吗?

好的,我在这个网站上找到了解决方案:https://blogs.msdn.microsoft.com/distributedservices/2009/11/10/wcf-calling-wcf-service-hosted-in-iis-on-the-same-machine-as-client-throws-authentication-error/

解决方案是添加注册表项并将我的网络应用程序添加到该条目以允许反向连接。