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中的三個斷點從未達到。我錯過了什麼?謝謝。
謝謝。我只是試了一下。我轉到:http:// localhost:42439/ResFiles/BauerContractReview_Feb2015,並且斷點沒有命中,我得到「無法找到資源。」錯誤返回。 – VincentZHANG