2008-12-22 2 views
3

Я хочу, чтобы все запросы отправлялись на *.jpg файлы на моем сервере. Для этого я создал HttpHandler, код выглядит следующим образом:Файл журнала не записывается из 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;}} 
    } 
} 

После компиляции этого и добавить его в Bin директории моего веб-приложения, как знак уважения, я добавил следующее в моем web.config файле:

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

Затем я также изменил настройки IIS Home Directory -> Application Configuration и добавил aspnet_isapi.dll для расширения .jpg.

В обработчике я попытался написать кое-что в файле журнала, который я создаю на диске C, но он не записывает в файл журнала, и я не могу найти ошибку.

ответ

2

Доступен ли пользователь вашему приложению под управлением C: \? Обычно это не корпус; что позволяет контексту приложения обращаться к корневому каталогу, представляет большой риск для безопасности.

Вместо этого создайте конкретный каталог, например c: \ logs, и предоставите полную учетную запись пользователя пула приложений ASP.NET для этого каталога.

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

Является ли это проблемой расположение StackOverflow или же опустить звездочку (*):

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

Если не хватает звездочку, я бы попытался увидеть вкладку Сеть в Firebug на Firefox (или используйте Fiddler - прокси-сервер для отладки http). Какой код ответа HTTP вы получаете от вызова?

0

Проверьте свои права.

Вы не слышали об этом от меня, но дайте «Каждому» полный контроль над своим C: а затем запустите свой тест и посмотрите, создан ли файл журнала. (Щелкните правой кнопкой мыши на C :, Свойства, вкладка «Безопасность» и т. Д.)

Не забудьте удалить разрешение после его завершения.

Предоставление полного контроля «Все» - это просто проверка того, выполняете ли вы проблему с разрешениями. Если это правда, вы можете исправить это правильно.

Не забудьте удалить разрешение после его завершения.

Смежные вопросы