Ich erstelle eine ASP.NET MVC 5-Site mit einigen PDF-Dateien für registrierte Mitglieder. Nur eingeloggte Benutzer können sie über die Controller-Aktion herunterladen. Sie sind jedoch auch über ihre physische URI zugänglich. Das URL-Muster ist wie:Mein benutzerdefinierter Route-Handler funktioniert nicht
localhost: 00000/resfiles/filename.pdf
Um den Zugang zu beschränken, ich diese post folgte eine benutzerdefinierte Route-Handler zu erstellen, und ich möchte die Identität des Benutzers in die überprüfen Handler, um nicht autorisiertes Herunterladen zu verhindern.
Ich habe meine RouteConfig.cs als:
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" }
);
}
}
und definiert eine PDFRouteHandler Klasse:
namespace Totara.RouteHandlers
{
public class PDFRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new PDFHandler(requestContext);
}
}
}
Und die 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; }
}
}
}
Gehen Sie auf die URL in meinem Browser: localhost: 42439/ResFiles/BauerContractReview_Feb2015.pdf
Die drei Haltepunkte in PDFHandler.cs werden nie erreicht. Was vermisse ich? Vielen Dank.
Danke. Ich habe es gerade ausprobiert. Ich gehe zu: http: // localhost: 42439/ResFiles/BauerContractReview_Feb2015, und die Haltepunkte werden nicht getroffen, und ich bekomme "Die Ressource kann nicht gefunden werden." Fehler zurückgegeben. – VincentZHANG