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.