在另一个线程的this answer上,我创建了一个重定向控制器,用于将旧的aspx文件路由到我的新MVC页面。
RouteConfig.cs:
routes.MapRoute(
name: "About",
url: "aboutus.aspx",
defaults: new { controller = "Redirect", action = "About" }
);
RedirectController.cs:
public ActionResult About()
{
return RedirectPermanent("/Home/About");
}
这很有效,因为我在/Views/Home/About.cshtml
中有一个视图。但是,如果我尝试重定向,比如.PDF文件,它就不起作用......
RouteConfig.cs:
routes.MapRoute(
name: "MyPDF",
url: "somefile.pdf",
defaults: new { controller = "Redirect", action = "MyPDF" }
);
RedirectController.cs:
public ActionResult MyPDF()
{
return RedirectPermanent("/Documents/somefile.pdf");
}
这是标准的404未找到的页面。我也试过一条没有运气的绝对路径:
RedirectController.cs:
public ActionResult MyPDF()
{
return RedirectPermanent("http://mydomain.com/Documents/somefile.pdf");
}
但仍然没有运气。有什么想法吗?
编辑:重定向的原因是因为第三方网站链接到旧的PDF文件(它们曾经存在于网站根目录,现在它们位于/Documents/
。我想301重定向到正确的文件。
答案 0 :(得分:0)
您为什么要重定向到文件?你能不能只为视图中的用户提供该文件的URL?
如果您坚持重定向,请转到:
return Redirect("~/Documents/myPdf.pdf");
但请确保Documents
文件夹中包含myPdf.pdf
个文件夹。并且您必须没有Documents控制器,否则它将无法工作。或者你需要通过添加另一条路由到路由表来解决它。
答案 1 :(得分:0)
您应该将以下内容添加到路由配置中:
routes.IgnoreRoute("{*pdfExtension}", new {pdfExtension=@".*\.pdf(/.*)?"});
如果您想忽略PDF文件扩展名,并且能够在URL中使用此类扩展名时重定向到正常操作。
答案 2 :(得分:0)
答案 3 :(得分:0)
routes.MapRoute(
name: "MyPDF",
url: "somefile.pdf",
defaults: new { controller = "Redirect", action = "MyPDF" }
);
public ActionResult MyPdf()
{
return Redirect("http://www.myvlkbenefits.com/MedicalSummary.pdf");
}
http://localhost/somefile.pdf
- >重定向到 - >以上
您的代码没有任何问题,也许您的网址与您在浏览器上输入的内容不同,从而为您提供404
答案 4 :(得分:0)
对于重定向PDF,我建议在 Web.config 中使用重写规则,而不是MVC控制器和RouteConfig.cs
。它看起来像这样:
在Web.config中的system.webServer
中<rewrite>
<rules>
<rule name="Permanent Redirect Rule" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{PermanentRedirects:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" redirectType="Permanent" />
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="PermanentRedirects">
<add key="/somefile.pdf" value="/Documents/newfile.pdf"/>
</rewriteMap>
</rewriteMaps>
</rewrite>
在每个PDF的add
部分添加rewriteMap
行以重定向。