c# asp.net ihttphandler

c# - El archivo de registro no se está escribiendo desde un HttpHandler



httphandler angular (3)

Quiero capturar todas las solicitudes que van a archivos *.jpg en mi servidor. Para hacerlo, he creado un HttpHandler cuyo código es el siguiente:

using System; using System.Collections.Generic; using System.Text; using System.Web; using System.IO; using System.Globalization; namespace MyHandler { public class NewHandler : IHttpHandler { public NewHandler() {} public void ProcessRequest(System.Web.HttpContext ctx) { HttpRequest req = ctx.Request; string path = req.PhysicalPath; string extension = null; string contentType = null; extension = Path.GetExtension(path).ToLower(); switch (extension) { case ".gif": contentType = "image/gif"; break; case ".jpg": contentType = "image/jpeg"; break; case ".png": contentType = "image/png"; break; default: throw new NotSupportedException("Unrecognized image type."); } if (!File.Exists(path)) { ctx.Response.Status = "Image not found"; ctx.Response.StatusCode = 404; } else { ctx.Response.Write("The page request is " + ctx.Request.RawUrl.ToString()); StreamWriter sw = new StreamWriter(@"C:/requestLog.txt", true); sw.WriteLine("Page requested at " + DateTime.Now.ToString() + ctx.Request.RawUrl); sw.Close(); ctx.Response.StatusCode = 200; ctx.Response.ContentType = contentType; ctx.Response.WriteFile(path); } } public bool IsReusable{get {return true;}} } }

Después de compilar esto y agregarlo al directorio Bin mi aplicación web como deferencia, agregué lo siguiente en mi archivo web.config :

<system.web> <httpHandlers> <add verb="*" path="*.jpg" type="MyHandler.NewHandler,MyHandler"/> </httpHandlers> </system.web>

Luego también modifiqué el Home Directory -> Application Configuration IIS Settings Home Directory -> Application Configuration y agregué aspnet_isapi.dll para la extensión .jpg .

En el controlador, he tratado de escribir algunas cosas en el archivo de registro que estoy creando en la unidad C, pero no está escribiendo en el archivo de registro y no puedo encontrar el error.


¿El usuario con el que se ejecuta su aplicación tiene acceso a C: /? Ese no suele ser el caso; Permitir que un contexto de aplicación acceda al directorio raíz presenta un gran riesgo de seguridad.

En su lugar, cree un directorio específico, por ejemplo c: / logs y otorgue a la cuenta de usuario del grupo de aplicaciones ASP.NET derechos completos solo sobre ese directorio.


<httpHandlers> <add verb="" path=".jpg" type="MyHandler.NewHandler,MyHandler"/> </httpHandlers>

¿Es solo un problema de disposición de o omitió el asterisco (*)?

<httpHandlers> <add verb="*" path="*.jpg" type="MyHandler.NewHandler,MyHandler"/> </httpHandlers>

Si no falta un asterisco, trataría de ver la pestaña Red en Firebug en Firefox (o usar Fiddler , un proxy de depuración http). ¿Qué código de respuesta HTTP obtienes de la llamada?


Verifica tus permisos

Usted no escuchó esto de mí, sino que le dio a "Todos" el control total de su C: y luego ejecuta su prueba y ve si se creó el archivo de registro. (Haga clic con el botón derecho del mouse en C :, Propiedades, pestaña Seguridad, etc.)

No olvides quitar el permiso cuando hayas terminado.

Darle a "Todos" el control total es solo probar si se está ejecutando un problema de permisos. Si es verdadero, entonces puedes arreglarlo correctamente.

No olvides quitar el permiso cuando hayas terminado.