ASP.Net 4.0-¿Cómo acceder a RouteData desde dentro de un ASHX?
routes httphandler (2)
Mi sitio web tiene un controlador (FileDownload.ashx) que se ocupa de todas las solicitudes de descarga de archivos.
Recientemente, migré mi sitio a ASP.NET 4.0, y ahora usa el enrutamiento extensamente. Todo funciona bien cuando se trata de solicitudes de página (aspx), pero no funciona con mi controlador: encuentro el siguiente error:
Escriba ''.Handlers.FileDownload'' no hereda de ''System.Web.UI.Page''.
Esto tiene sentido, ya que el enrutamiento solo se implementa en la página.
¿Qué pasos debo seguir para poder usar el enrutamiento y mi .ashx juntos? Quiero poder extraer RouteData.Values
de la ruta.
public class FileDownload : IHttpHandler
{
}
Suena como un problema de IIS.
¿Funciona esto si intentas usar el servidor de desarrollo ASP.NET (Cassini)?
Si está utilizando IIS6, necesitará utilizar asignaciones de aplicaciones Wildcard; consulte aquí .
También necesitarás crear tus rutas según cualquier página ASPX, como esta:
public static void RegisterRoutes(RouteCollection routes)
{
string[] allowedMethods = { "GET", "POST" };
HttpMethodConstraint methodConstraints = new HttpMethodConstraint(allowedMethods);
Route fileDownloadRoute = new Route("{foo}/{bar}", new FileDownload());
fileDownloadRoute.Constraints = new RouteValueDictionary { { "httpMethod", methodConstraints } };
routes.Add(fileDownloadRoute);
}
¿Ha hecho usted eso? Si es así, diría que su problema es definitivamente con IIS.
Vea aquí un buen artículo sobre enrutamiento ASP.NET 4 para IIS6 e IIS7.
¡Buena suerte!
Necesitaba crear un handler al final, pero fue bastante fácil: http://haacked.com/archive/2009/11/04/routehandler-for-http-handlers.aspx
.Net 4.0 no admite nativamente el manejo de rutas para IHttpHandlers.