未从HttpHandler写入日志文件

我想捕获所有转到我服务器上*.jpg文件的请求。 为此,我创建了一个HttpHandler,其代码如下:

 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;}} } } 

编译完这个并将其作为deference添加到我的Web应用程序的Bin目录后,我在web.config文件中添加了以下内容:

      

然后我还修改了IIS设置Home Directory -> Application Configuration并为.jpg扩展添加了aspnet_isapi.dll

在Handler中,我试图在我在C盘中创建的日志文件中写一些东西,但它没有写入日志文件,我无法找到bug。

    

这只是stackoverflow的布局问题还是省略了星号(*):

    

如果它没有丢失星号,我会尝试在Firefox上看Firebug中的Network选项卡(或者使用Fiddler – 一个http调试代理)。 您从通话中获得了什么HTTP响应代码?

您的应用程序运行的用户是否可以访问C:\? 通常情况并非如此; 允许应用程序上下文访问根目录会带来很大的安全风险。

而是创建一个特定的目录,例如c:\ logs,并为ASP.NET应用程序池的用户帐户单独提供该目录的完全权限。

检查您的权限。

您没有从我这里听到这个消息,但是将“Everyone”完全控制到您的C:然后运行测试并查看是否创建了日志文件。 (右键单击C:,属性,安全性选项卡等…)

完成后不要忘记删除权限。

赋予“Everyone”完全控制权只是测试您是否遇到了权限问题。 如果是真的,那么你可以正确地修复它。

完成后不要忘记删除权限。