I have several documents stored in a folder in a project using ASP MVC 5. The HTML link to see the document is:
<a ng-href="~/download/document/{{vm.document}}"><a/>
Then this URL will see it in adress bar:
http://localhost:20870/download/document/d47a1c96-e4d7-423b-aa83-76537c392ad2.pdf
For safety I do not want this URL is visible!
答案 0 :(得分:1)
正如其他人所指出的,网址是公开的。没有合理的方法可以将它们完全隐藏起来。
但是,您可以使用MVC来控制对资源的访问,例如物理文件。
默认情况下,MVC不提供物理文件,IIS直接为它们提供服务。假设您的文件实际位于/download/document/
虚拟目录中,请首先阻止通过根web.config
文件直接访问该文件夹。
<location path="download/document">
<system.web>
<authorization>
<deny users="*" />
</authorization>
</system.web>
</location>
这可以确保没有用户(无论是否登录)可以直接通过IIS访问该文件。
然后,您可以将控制器操作方法与[Authorize]
属性结合使用,以控制谁有权访问该文件。
public class SecureDownloadController : Controller
{
[Authorize]
public ActionResult Document(string id)
{
return File(@"D:\wwwroot\documents\download\" + id, "application/pdf");
}
}
以上内容将允许任何登录用户访问URL http://localhost:20870/securedownload/document/d47a1c96-e4d7-423b-aa83-76537c392ad2.pdf
上的文件。
重要提示:切勿在网址中使用真实位置。 IIS将支持MVC控制器操作的物理位置,因此如果物理文件存在,您将收到错误。您可能不希望用户知道文件的物理位置。
您可以使用以下方法将其进一步限制为特定的用户角色:
[Authorize(Roles = "Admin,SuperUser")]
或者,您可以继承[Authorize]
属性并使用其他方式来保护文件,例如,通过HTTP标头传递哈希代码。
另一种可能的替代方法:Generate the PDF as a stream而不是使用磁盘上持久存储的物理文件。这确保了没有可以访问文件的物理路径 - 它只能通过控制器操作方法访问。它还确保您永远不必清理一次性使用PDF文件的目录。
参考文献:
答案 1 :(得分:0)
答案 2 :(得分:-1)
你应该使用这个
<a href="javascript:void(0)" onclick="location.href='" . $ajax_like_link . "'">Link</a>