【问题标题】:Log file is not being written to from an HttpHandler未从 HttpHandler 写入日志文件
【发布时间】:2008-12-22 10:26:49
【问题描述】:

我想捕获所有发送到我服务器上*.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;}}
    }
}

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

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

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

在处理程序中,我尝试在 C 盘中创建的日志文件中写入一些内容,但它没有写入日志文件,我无法找到错误。

【问题讨论】:

    标签: c# asp.net ihttphandler


    【解决方案1】:
    <httpHandlers>
       <add verb="" path=".jpg" type="MyHandler.NewHandler,MyHandler"/>
    </httpHandlers> 
    

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

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

    如果它没有丢失星号,我会尝试在 Firefox 上查看 Firebug 中的网络选项卡(或使用 Fiddler - http 调试代理)。您从调用中得到什么 HTTP 响应代码?

    【讨论】:

      【解决方案2】:

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

      改为创建一个特定目录,例如 c:\logs,并授予 ASP.NET 应用程序池的用户帐户对该目录的完全权限。

      【讨论】:

        【解决方案3】:

        检查您的权限。

        您没有从我这里听到这个,而是让“所有人”完全控制您的 C:,然后运行您的测试并查看是否创建了日志文件。 (鼠标右键单击 C:、属性、安全选项卡等...)

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

        授予“所有人”完全控制权只是测试您是否遇到权限问题。如果属实,那么您可以正确修复它。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-04
          • 2016-05-08
          • 2012-11-11
          • 1970-01-01
          • 2015-03-19
          • 2010-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多