2016-10-22 76 views
1

我正在構建一個ASP.NET MVC 5網站,一些註冊成員的PDF文件,只有登錄的用戶可以通過控制器操作下載它們;但是,它們也可以通過它們的物理URI訪問。 URL模式是這樣的:我的自定義路由處理程序不起作用

本地主機:00000/resfiles/filename.pdf

爲了限制訪問,我跟着這個post創建一個自定義路由處理程序,我想驗證用戶的身份以防止未經授權的下載。

我有我的RouteConfig.cs爲:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.Add("PDFRoute", new Route("ResFiles/{filename}", new PDFRouteHandler())); 

     routes.MapRoute(
      name: "ProductDetail", 
      url: "NewProduct/Detail/{prdId}", 
      defaults: new { controller = "NewProduct", action = "Detail", prdId = "" }, 
      namespaces: new[] { "Totara.Controllers" } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new[] { "Totara.Controllers" } 
     ); 
    } 
} 

,並定義了PDFRouteHandler類爲:

namespace Totara.RouteHandlers 
{ 
    public class PDFRouteHandler : IRouteHandler 
    { 
     public IHttpHandler GetHttpHandler(RequestContext requestContext) 
     { 
      return new PDFHandler(requestContext); 
     } 
    } 
} 

而且PDFHandler:在

namespace Totara.HttpHandlers 
{ 
    public class PDFHandler : IHttpHandler 
    { 
     public PDFHandler(RequestContext context) 
     { 
      ProcessRequest(context); // never reach here 
     } 

     private static void ProcessRequest(RequestContext requestContext) 
     { 
      var response = requestContext.HttpContext.Response; // never reach here 
      var request = requestContext.HttpContext.Request; 
      var server = requestContext.HttpContext.Server; 
      var requestFile = requestContext.RouteData.Values["filename"].ToString(); 
      var path = server.MapPath("~/ResFiles/"); 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      var test = "test"; // never reach here 
     } 

     public bool IsReusable 
     { 
      get { return false; } 
     } 

    } 

} 

轉到我的網址瀏覽器:localhost:42439/ResFiles/BauerContractReview_Feb2015.pdf

PDFHandler.cs中的三個斷點從未達到。我錯過了什麼?謝謝。

回答

0

如果您從您的URL中刪除「.pdf」,您的代碼將被執行。另見文章this。如果你想支持「.pdf」,那麼你必須配置IIS並在web.config中註冊你的處理程序。詳情請參閱this文章。

+0

謝謝。我只是試了一下。我轉到:http:// localhost:42439/ResFiles/BauerContractReview_Feb2015,並且斷點沒有命中,我得到「無法找到資源。」錯誤返回。 – VincentZHANG

相關問題