Estoy tratando de implementar una Costumbre HttpHandler (por primera vez), me han dado un tutorial a seguir, pero no podía llegar a trabajar. Luego encontré otro tutorial, pero no podía conseguir que funcione, son las dos me da el mismo mensaje de error.

El controlador personalizado es proteger a las personas de la descarga de determinados tipos de archivo, aunque creo que el error es somekind de problema de configuración como yo no puede conseguir que el sitio web funcione en todos, una vez me agregue el httpHandlers a la Web.El archivo 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>

Si usted requiere más código, por favor hágamelo saber.

Gracias por la ayuda. 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

Personalizado HttpHandler Error: no se Pudo cargar el tipo 'FileProtectionHandler'

  • Estoy teniendo el mismo problema, ¿alguna vez resolver esto? Todas las respuestas parecen asumir una aplicación web en lugar de un sitio web… de ahí la confusión sobre el espacio de nombres. Gracias de antemano por la ayuda de nadie/sugerencias.
InformationsquelleAutor JBoom | 2011-06-30

8 Comentarios

  1. 14

    He tenido un problema similar. La solución estaba en la raíz del espacio de nombres definido en propiedades.
    En mi código no tengo espacio de nombres, por lo que en este caso es necesario utilizar

    type="[namespace or root namespace].[your class name]"
    • Lo sentimos cómo saber el nombre de la raíz de espacio de nombres??
  2. 3

    Tratar de llenar el espacio de nombres que la vida de la clase así como la asamblea es construido.

    Algo como esto

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

    o, posiblemente, este

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

    o este

    <add verb="*" path="*.pdf" type="Beswick.FileProtectionHandler"/>
    • es en una .ashx archivo guardado en la raíz de mi aplicación, el archivo se llama FileProtectionHandler y también Class=»FileProtectionHandler» realmente no sé qué poner como he seguido los tutoriales???
    • ¿Qué espacio de nombres es de alrededor de tu clase? Reemplazar Namespace.Of.Class parte con eso. A continuación, abra las propiedades del proyecto y ver lo que el archivo de salida va a ser. El uso que cuando se reemplaza el ClassAssembly parte.
    • Todavía no sabes qué sugiere, no tengo un espacio de nombres alrededor de mi clase, no está seguro de si su refiriéndose a C#? he pegado la FileProtectionHandler.ashx código de arriba.
    • Si usted abra las propiedades del proyecto, ¿cuáles son los valores para el montaje y puesta en marcha de espacio de nombres para la aplicación?
    • La única cosa que puedo encontrar es la » Propiedad de las Páginas es esto lo que quieres decir? He subido una imagen de más arriba. Sé que mi aplicación se llama Beswick, no está seguro acerca del montaje y puesta en marcha del espacio de nombres. Lo siento, estoy tan densa, todo esto es nuevo para mí!
    • Actualizado con un par de cosas para probar. Déjame saber cómo los ve.
    • Cualquiera que sea el nombre de la asamblea es la que se muestra en el directorio Bin es lo que usted desea utilizar. Trate de buscar y sustituir el «, Beswick» con lo que el montaje es sin la extensión.
    • hmm…el problema es que no hay nada correspondiente a la FileProtectionHandler en el directorio bin, hay sólo algunos .dll archivos que hay en relación a otras cosas que sé que no se que hacer con esto.

  3. 3

    Sólo tenía el mismo problema de la adición de un nuevo IHttpHandler a un proyecto existente. El controlador he añadido habían propiedad build action «Contenido» en lugar de «Compilar». El cambio a compilar solucionado el problema

  4. 0

    Acabo de venir de nuevo a este problema después de un largo descanso. No estoy seguro de si lo tengo funcionando plenamente, como sin embargo, como desde la primera prueba no es proteger el archivo si el usuario no ha iniciado sesión en el sitio web, pero yo no estoy recibiendo el mensaje de error.

    He encontrado la solución al problema aquí: HttpHandler 101 FALLAR

  5. 0

    Si ninguna de estas respuestas, y su proyecto es una Web Appliccation (en oposición a una Página Web como en HttpHandler 101 FALLAR), compruebe la ruta de salida de generación. Recientemente había cambiado mi plataforma x86, que cambió Propiedades ->Construir -> ruta de acceso de Salida a

    bin\x86\Debug

    He cambiado de nuevo el

    bin\

    y funcionó.

  6. 0

    Me encontré con un error similar, mientras que la depuración de Azure Web de la Aplicación a nivel local (el error persiste cuando se implementa en Azure). Sospecho que el error tiene algo que ver con almacenada localmente configuración/compilación de los archivos, que no se actualizan correctamente incluso cuando la solución es limpiar y reconstruido. Yo tenía dos proyectos diferentes que se producen con el mismo nombre del archivo dll (aunque en diferentes lugares), no estoy seguro si esto tiene algún efecto en el problema.

    Después de una larga experimentación, la solución para mí era ir a Explorador de soluciones de Visual Studio, haga clic derecho en el proyecto –> Propiedades. En virtud de la Aplicación de la ficha, cambiar el marco de Destino a otra cosa (he cambiado 4.6 4.6.1). Usted recibirá un mensaje diciendo que el proyecto se volverá a cargar, haga clic en ACEPTAR. Después de volver a cargar, hacer la misma cosa volver de nuevo a su versión original (4.6 para mí). Esta solucionado el problema para mí.

    Sería bueno para entender la causa raíz del problema. Me sigue apareciendo el error, a veces, al volver a abrir el proyecto, y tengo que ir a través de los pasos anteriores de nuevo.

  7. 0

    Cambiar el orden y mantener la siguiente en el fichero de configuración solucionado mi problema.

    <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>
  8. 0

    .NET 4.5 WebForm ,que se fija para mí después de añadir el nombre de proyecto.ClassName

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

    y he adicional de la parte no positivo si se actaully hacer cualquier cosa en el sistema.servidor web -> Controladores tengo este

    <Handlers>
          <add verb="*"  path="scripts/*" name="NoAccessHandler"  
            preCondition="integratedMode" type="NoAccessHandler"
            resourceType="Unspecified"/>
    </Handlers>

Dejar respuesta

Please enter your comment!
Please enter your name here