2014-01-27 83 views
1

從另一個線程this answer,我創建了一個重定向控制器來將我的舊aspx文件路由到我的新MVC頁面。C#.NET 301重定向到文件,而不是控制器

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重定向到正確的文件??

+2

這是因爲ASP.MVC不理解帶有句點的URL。默認情況下,IIS獲取這些請求的控制權並嘗試查找實際文件。我不知道如何解決它。 –

回答

0

你爲什麼想重定向到文件你能不能只給一個網址,該文件到用戶視圖中的

在你堅持重定向的情況下,只是去:

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

但確保有Documents fol在那裏用myPdf.pdf文件。而且你不能有文件控制器,否則它將無法工作。或者您需要通過添加另一個路由到路由表來解決此問題。

+0

原因之一是記錄靜態文件下載(以重定向的額外HTTP請求爲代價)。 –

+0

永不言敗!謝謝,西蒙 – trailmax

+0

我期待重定向的原因是因爲第三方網站鏈接到舊的PDF文件。所以我想301重定向到正確的文件。我嘗試了你的建議'return Redirect(「〜/ Documents/myPdf.pdf」);'但沒有運氣。 – dmathisen

0

您應該添加以下到您的路由配置:

routes.IgnoreRoute("{*pdfExtension}", new {[email protected]".*\.pdf(/.*)?"}); 

在你想忽略PDF文件擴展名,並能夠重定向到一個正常的動作情況下,當這種擴展在URL中使用。

0

如果您只想返回文檔,那麼在控制器上使用File()方法返回文件沒什麼意義。

它不需要重定向,只是爲了讓你有一個物理文件位置。

對不起,如果我誤解了我的手機的問題和答案的格式。

here是鏈接

+0

謝謝。我必須運行,但明天會看看File()方法。爲了澄清,我想重定向,因爲第三方網站鏈接到舊的和不正確的PDF路徑。 – dmathisen

+0

如果PDF文件存儲在本地網絡服務器上並且您有權訪問它們,那麼文件操作結果將適用於您。我在答案中添加了鏈接 – Qpirate

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

0

爲了重定向PDF,我建議在Web.config而不是MVC控制器和RouteConfig.cs中使用重寫規則。它可以是這個樣子:

在system.webServer在Web.config中

<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> 

rewriteMap部分每個PDF重定向添加add線。