Пользовательская ошибка HttpHandler: не удалось загрузить тип 'FileProtectionHandler' - PullRequest
4 голосов
/ 30 июня 2011

Я пытаюсь реализовать пользовательский HttpHandler (впервые), мне дали учебное пособие, но я не смог заставить его работать.Затем я нашел другой учебник, но не смог заставить его работать, они оба выдают мне одно и то же сообщение об ошибке.

Пользовательский обработчик предназначен для защиты людей от загрузки файлов определенных типов, хотя я думаю, что ошибка какая-топроблемы конфигурации, так как я не могу заставить сайт работать вообще, как только я добавляю httpHandlers в файл Web.Config.

    Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Could not load type 'FileProtectionHandler'.

Source Error:

Line 47:         </compilation>
Line 48:         <httpHandlers>
Line 49:             <add verb="*" path="*.pdf" type="FileProtectionHandler"/>
Line 50:         </httpHandlers>

Если вам требуется больше кода, пожалуйста, дайте мне знать.

Спасибо за любую помощь.J.

    <%@ WebHandler Language="VB" Class="FileProtectionHandler" %>

Imports System
Imports System.Web
Imports System.Web.Security
Imports System.IO
Imports System.Web.SessionState

Public Class FileProtectionHandler : Implements IHttpHandler

    Private Function SendContentTypeAndFile(ByVal context As HttpContext, ByVal strFile As [String]) As HttpContext
        context.Response.ContentType = GetContentType(strFile)
        context.Response.TransmitFile(strFile)
        context.Response.[End]()
        Return context
    End Function

    Private Function GetContentType(ByVal filename As String) As String
        ' used to set the encoding for the reponse stream
        Dim res As String = Nothing
        Dim fileinfo As New FileInfo(filename)

        If fileinfo.Exists Then
            Select Case fileinfo.Extension.Remove(0, 1).ToLower()
                Case "pdf"
                    If True Then
                        res = "application/pdf"
                        Exit Select
                    End If
            End Select

            Return res
        End If

        Return Nothing
    End Function

    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        context.Response.ContentType = "text/plain"
        context.Response.Write("Hello World")
    End Sub

    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

End Class

Property Pages Img

Ответы [ 8 ]

14 голосов
/ 08 марта 2012

У меня была похожая проблема.Решение находилось в корневом пространстве имен, определенном в свойствах.В моем коде у меня нет пространства имен, поэтому в этом случае вам нужно использовать

type="[namespace or root namespace].[your class name]"
3 голосов
/ 20 марта 2015

Просто возникла такая же проблема при добавлении нового IHttpHandler в существующий проект.У обработчика, который я добавил, было свойство действия сборки «Content», а не «Compile».Изменение его для компиляции решило проблему

3 голосов
/ 30 июня 2011

Попробуйте заполнить пространство имен, в котором живет класс, а также сборку, для которой он построен.

Примерно так

<add verb="*" path="*.pdf" type="FileProtectionHandler, Beswick"/>

или, возможно, это

<add verb="*" path="*.pdf" type="Beswick.FileProtectionHandler, Beswick"/>

или это

<add verb="*" path="*.pdf" type="Beswick.FileProtectionHandler"/>
0 голосов
/ 06 ноября 2018

.NET 4.5 WebForm, это было исправлено после добавления ProjectName.ClassName

<httpHandlers>
<add verb="*" path="scripts/*" validate="false" type="ProjectName.NoAccessHandler"/>
</httpHandlers>

и у меня лишняя часть не положительная, если она действительно что-то делает под system.webServer -> Обработчики У меня есть это

<Handlers>
      <add verb="*"  path="scripts/*" name="NoAccessHandler"  
        preCondition="integratedMode" type="NoAccessHandler"
        resourceType="Unspecified"/>
</Handlers>
0 голосов
/ 10 сентября 2018

Изменение порядка и сохранение их в конфигурационном файле, как показано ниже, исправили мою проблему.

<system.webServer>
    <handlers>     
      <remove name="traceverbhandler" />
      <remove name="optionsverbhandler" />      
      <add name="extensionlessurlhandler-integrated-4.0" path="*." verb="*" type="system.web.handlers.transferrequesthandler" />
      <remove name="extensionlessurlhandler-integrated-4.0" />
    </handlers>
  </system.webServer>
0 голосов
/ 19 января 2017

Я обнаружил похожую ошибку при локальной отладке веб-приложения Azure (ошибка сохраняется при развертывании в Azure).Я подозреваю, что ошибка связана с локально сохраненными файлами конфигурации / компиляции, которые не обновляются должным образом, даже когда решение очищается и перестраивается.У меня было два разных проекта, которые производили одинаково названные dll (хотя и в разных местах), но я не был уверен, оказало ли это какое-либо влияние на проблему.

После долгих экспериментов я решил перейти к Solution Explorer в VisualStudio, щелкните правой кнопкой мыши по проекту -> Свойства.На вкладке Application измените Target framework на что-то другое (я изменил 4.6 на 4.6.1).Вы получите сообщение о том, что проект будет перезагружен, нажмите OK.После перезагрузки сделайте то же самое, вернувшись к исходной версии (4.6 для меня).Это исправило проблему для меня.

Было бы хорошо понять основную причину проблемы.Иногда я по-прежнему получаю сообщение об ошибке при повторном открытии проекта, и мне приходится снова выполнять вышеописанные шаги.

0 голосов
/ 22 января 2013

Если ни один из этих ответов не работает, и ваш проект является веб-приложением (в отличие от веб-страницы, как в HttpHandler 101 FAIL ), проверьте путь вывода сборки. Недавно я изменил свою платформу на x86, которая изменила Свойства -> Сборка -> Выходной путь на

bin\x86\Debug

Я изменил это обратно на

bin\

и это сработало.

0 голосов
/ 21 марта 2012

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

Я нашел решение проблемы здесь: HttpHandler 101 FAIL

...