C# 如何在MVC中保护文档/pdf请求?

C# 如何在MVC中保护文档/pdf请求?,c#,asp.net-mvc-3,model-view-controller,C#,Asp.net Mvc 3,Model View Controller,我想知道保护文档的首选做法是什么 如果我的页面中有如下链接: option 1) http://myserver/documents/mydoc.pdf 我可以使用过滤器来检查用户是否已登录或具有正确的角色来保护它吗 我的第一个想法是创建一个动作调用ViewDoc。在ViewDoc中,我将检查权限等,然后读入文件并将其发送给响应 所以我的请求是这样的: option 2) http://myserver/mycontroller/ViewDoc/17 如果使用选项2,是否需要将文件

我想知道保护文档的首选做法是什么

如果我的页面中有如下链接:

option 1)   http://myserver/documents/mydoc.pdf
我可以使用过滤器来检查用户是否已登录或具有正确的角色来保护它吗

我的第一个想法是创建一个动作调用ViewDoc。在ViewDoc中,我将检查权限等,然后读入文件并将其发送给响应

所以我的请求是这样的:

option 2)    http://myserver/mycontroller/ViewDoc/17
如果使用选项2,是否需要将文件放在web文件夹之外?如果web文件夹中有,用户是否可以直接向该文件发出请求?
还有其他选择或建议吗?

您提出的解决方案是正确的方法

您将使用一个操作(除非您有充分的理由不这样做),在该操作中,您可能会使用
[Authorize]
并执行任何必要的业务逻辑来验证用户是否应该阅读它。然后使用控制器的函数返回文件

[Authorize]
public FileResult ViewDoc(int id)
{
    // do things, maybe lookup file path of document from database
    return File(pathToYourFile, "document/pdf", "downloadedFileName.pdf");
}

只需通过具有Authorize属性的操作返回文档:

[Authorize]
public ActionResult GetFile(string filename)
{
  //get the file somewhere
  return return File(file, "contentType");
}

只要通过一个带有授权属性的操作返回文档,啊,这就是我要做的。我想知道是否有更简单的方法。我应该把文件放在哪里?在web文件夹之外?如果我把它放在web文件夹中,我应该保护web.config中的文件夹吗?最好把这些文件放在应用程序之外的某个地方,比如文件服务器。