C#.NET 301重定向到文件,而不是控制器

时间:2014-01-27 21:13:47

标签: c# asp.net-mvc redirect asp.net-mvc-routing

在另一个线程的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重定向到正确的文件。

5 个答案:

答案 0 :(得分:0)

您为什么要重定向到文件?你能不能只为视图中的用户提供该文件的URL?

如果您坚持重定向,请转到:

return Redirect("~/Documents/myPdf.pdf");

但请确保Documents文件夹中包含myPdf.pdf个文件夹。并且您必须没有Documents控制器,否则它将无法工作。或者你需要通过添加另一条路由到路由表来解决它。

答案 1 :(得分:0)

您应该将以下内容添加到路由配置中:

routes.IgnoreRoute("{*pdfExtension}", new {pdfExtension=@".*\.pdf(/.*)?"});

如果您想忽略PDF文件扩展名,并且能够在URL中使用此类扩展名时重定向到正常操作。

答案 2 :(得分:0)

如果您只想返回文档,那么仅使用控制器上的File()方法返回文件就没有意义了。

它不需要重定向,只需要您拥有物理文件位置。

很抱歉,如果我误解了问题以及答案的格式,请来自我的手机。

here是链接

答案 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行以重定向。