[英]Serve static pdf files in solution folder - in MVC pipeline , with different route
在我的一个旧项目中,我们确实有一个名为 XYZ 的 static 内容文件夹,我们将其保存在与根目录相同的位置。
目前我们直接通过 url 像 'siteaddress/XYZ/test.pdf' 或 siteaddress/XYZ/2020/Test1.pdf 来获取 Z437175BA4191210EE004E1D973 文件
现在我们需要在路径中存储一些机密文件。 所以我们计划限制对路径的直接访问,并通过 MVC 管道服务
我们添加了一个处理程序来启用来自文件夹的请求,通过 mvc 管道发送到 go
<add
name="ManagedPdfExtension"
path="XYZ/*/*.pdf"
verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0"
/>
<add
name="ManagedPdfInnerFolderExtension"
path="CommonFiles/*/*.pdf"
verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0"
/>
还创建了一个方法来返回 controller 中的文件
[HttpGet]
[Route("XYZ/{attachmentName}")]
public ActionResult CommonFiles(string attachmentName)
{
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/XYZ/"+ attachmentName);
byte[] fileBytes = System.IO.File.ReadAllBytes(path);
string fileName = "Test.pdf";
var cd = new ContentDisposition
{
Inline = true,
FileName = fileName
};
Response.Clear();
Response.AddHeader(CoreConstants.ContentDisposition, cd.ToString());
Response.AddHeader(CoreConstants.WindowTarget, CoreConstants.WindowTargetBlank);
Response.BufferOutput = false;
return File(fileBytes, "application/pdf");
}
此代码适用于直接位于文件夹 XYZ 下的文件
这意味着如果我尝试像 url
正在工作的站点地址/XYZ/test.pdf。
但是对于另一个文件夹中的 pdf,我无法使用现有方法。 由于我们在方法中只定义了单个参数attachmentName
名称,因此我无法获取子文件夹下的文件。
有没有办法在 MVC 中做同样的事情?
由于某些原因,我无法将所有这些项目移至数据库,更改文件夹结构。 我也无法创建一个映射表
url:密钥并改用密钥。
url 来自一个在许多应用程序中使用的通用表。 所以改变它有点困难。
如果文件夹和子文件夹受到限制,那么我可以处理多条路线。 但是这里的子文件夹编号也可以是一个变量。
实际上来自以下网址
siteadress/XYZ/abc/bn/test.pdf
siteadress/XYZ/abc/cf/bn/test.pdf
siteadress/XYZ/abc/bn/test.pdf
有什么方法可以使它达到一个带有字符串参数的 controller 方法
abc/bn/test.pdf
abc/cf/bn/test.pdf
abc/bn/test.pdf
??
在属性部分添加了带有 * 的路由。
[HttpGet]
[Route("CommonFiles/{*any}")]
public ActionResult CommonFiles(string attachmentName)
{
var filePathWithName = this.RouteData.Values["any"];
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/CommonFiles/"+ filePathWithName);
path = path.Replace("//", "/").Replace("/","//");
byte[] fileBytes = System.IO.File.ReadAllBytes(path);
string fileName = "Test.pdf";
var cd = new ContentDisposition
{
Inline = true,
FileName = fileName
};
Response.Clear();
Response.AddHeader(CoreConstants.ContentDisposition, cd.ToString());
Response.AddHeader(CoreConstants.WindowTarget, CoreConstants.WindowTargetBlank);
Response.BufferOutput = false;
return File(fileBytes, "application/pdf");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.