C# 如何使用<;从asp.net中的共享文件夹下载文件;a href>;?

C# 如何使用<;从asp.net中的共享文件夹下载文件;a href>;?,c#,html,asp.net,asp.net-mvc,asp.net-4.5,C#,Html,Asp.net,Asp.net Mvc,Asp.net 4.5,背景: 有一个asp.NETMVC应用程序,我目前正在不使用MVC重新创建它 在MVC应用程序中,允许用户下载文档的元素如下: <a href="/api/file/2187/filter.jpg" target="_blank">download</a> 但是,这在Chrome中不起作用,给我一个错误:不允许加载本地资源 我找不到像MVC应用程序中那样在http上为文件创建链接的方法。如何在应用程序中启用链接,如:http://myapplication/api/fi

背景:

有一个asp.NETMVC应用程序,我目前正在不使用MVC重新创建它

在MVC应用程序中,允许用户下载文档的
元素如下:

<a href="/api/file/2187/filter.jpg" target="_blank">download</a>
但是,这在Chrome中不起作用,给我一个错误:
不允许加载本地资源

我找不到像MVC应用程序中那样在
http
上为文件创建链接的方法。如何在应用程序中启用链接,如:
http://myapplication/api/file/2187/filter.jpg
要在href中使用吗

注意:要下载的文件位于共享文件夹中,无法将其移动到我的本地PC或无法将其导入项目中等

注意2:下载文件后不应刷新页面


任何帮助或建议都应该感谢!谢谢。

不应接受URL或查询字符串中的文件路径:

我强烈建议不要在查询字符串或URL中使用filepath。 我在代码中看到,您没有验证文件路径,也没有直接下载文件。这可能非常危险。如果权限设置不正确,或者没有其他机制阻止此类请求,用户可以尝试下载web.config或web服务器上的任何其他文件

我强烈建议使用间接方式下载文件

什么是间接性?

在间接寻址中,您将为文件创建一个标识符。它也可能是一个GUID。 然后您可以通过QueryString或URL接受此GUID。 然后在您的操作中,您将它映射到正确的文件,然后下载它

代码示例:

下面的代码示例使用文件ID

当传递文件id时,它会尝试在
CustomDocumentObj
中获取文件详细信息。 这些详细信息包含实际的文件路径。
然后,您可以执行验证以检查这是否是与应用程序相关的文件,以及您的应用程序是否允许下载该文件

public class ServiceController : Controller
{
   public ActionResult DownloadFile(string id)
   {
       CustomDocumentObj document = new CustomDocumentObj(Int32.Parse(id));
       // OPTIONAL - validation to check if it is allowed to download this file.
       string filetype = Helpers.GetMimeType(document.FilePath);
       return File(document.FilePath, filetype, Path.GetFileName(document.FilePath));
   }
} 
然后在URL中,它可以是如下所示:

<a href="\\myfolder\myapp\file\2187\filter.jpg" target="_blank">download</a>
<a href="/Services/DownloadFile/1">Download File</a>

有关更多详细信息,请参阅此

<a href="/Services/DownloadFile/1">Download File</a>