情况就是这样。
我有一个action方法,它在“Documents”控制器中返回一个名为“GetDocument”的文件。它有一个Document类型的参数,它包含文档路径,标题,类型等。
我有一个实体的视图,它附带了一些文档。例如,一则新闻报道,附有附件。在此视图中,我显示了最终用户应该能够下载的文档的各种链接。
问题是:如何创建将“Document”对象传递给“GetDocument”操作方法的链接?
修改:我不想向用户显示文档的完整路径。事实上,我希望我将文档存储在App_Data文件夹中,这样就无法下载它们。
谢谢!
答案 0 :(得分:2)
您可以使用ActionLink
:
@Html.ActionLink(
"Download",
"GetDocument",
new {
path = "report.pdf",
type = "application/pdf"
}
)
然后:
public ActionResult GetDocument(Document doc)
{
var appData = Server.MapPath("~/App_Data");
var file = Path.Combine(appData, doc.Path);
file = Path.GetFullPath(file);
if (!file.StartsWith(appData))
{
// Ensure there are no cheaters trying to read files
// outside of the App_Data folder like "../web.config"
throw new HttpException(403, "Forbidden");
}
if (!File.Exists(file))
{
return HttpNotFound();
}
return File(file, doc.Type, Path.GetFileName(file));
}
答案 1 :(得分:0)
为什么您的控制器在调用操作时需要知道完整的文档?当然你的文件有ID。获取id,向存储库询问域对象,然后获取文件。