gpt4 book ai didi

asp.net-mvc-3 - ASP.NET MVC 3:当id为文件名时,如何查找 Controller 而不是文件

转载 作者:行者123 更新时间:2023-12-02 04:03:55 25 4
gpt4 key购买 nike

我遇到了一些奇怪的问题。这对我来说很奇怪,因为我不理解它,并且因为一切都还不错。因此,我的任务是调用 Controller 并传递文件名(带有扩展名), Controller 应识别该文件,写入日志,然后返回文件本身(如果存在)(在“下载”文件夹中)。我在做什么:

public class DownloadController : Controller
{
public ActionResult Files(string id)
{
string filePath = Server.MapPath(Url.Content(string.Format("~/Downloads/{0}", id)));
string serverPath = Url.Content(string.Format("~/Downloads/{0}", id));
string ext = Path.GetExtension(filePath);
if (!System.IO.File.Exists(filePath))
{
//return to the error controller
}
string mem = "text/html";
if (ext == ".zip")
{
mem = "application/x-zip-compressed";
}
else if (ext == ".html" || ext == ".htm")
{
mem = "text/html";
}
else if (ext == ".pdf")
{
mem = "application/pdf";
}
//Save info about downloads into DB
repStat.SaveStatInfo(id, HttpContext.Request.UserHostAddress,
HttpContext.Request.UserHostName, HttpContext.Request.UserAgent);
return File(serverPath, mem, id);
}
}

Global.asax有一部分:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("Content/{*pathInfo}");

它没有更多的“忽略”。

因此,问题是当我在打电话时:mysite.com/download/files/test.pdf服务器返回我“找不到页面”。当然,下载/文件路径中没有这样的文件!它应该调用 Controller ,而不是实际文件。删除mysite.com/download/files/test之类的扩展名后,服务器即会调用 Controller 。我不明白为什么它不能将文件名识别为参数,而是试图查找文件。

如果我尝试使用其他 Controller ,则绝对存在相同的行为-参数不具有任何扩展名后,它就可以正常工作,否则服务器会寻找文件。

最奇怪的是,一切在本地都可以正常运行,但在服务器上却无法正常工作(工作时间不长,然后就停止了)。

最佳答案

我也觉得很奇怪。一种解决方法是对点(.)进行编码,例如,

test.pdf -> test++pdf

然后解码,然后解码回去。

可能不是最好的解决方案,但肯定会解决问题。

关于asp.net-mvc-3 - ASP.NET MVC 3:当id为文件名时,如何查找 Controller 而不是文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8691689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com