Не удается загрузить пользовательский httphandler для нескольких проектов - PullRequest
0 голосов
/ 12 февраля 2019

в моем решении у меня есть несколько проектов.

В моем Allgemein.dll (General.dll) у меня есть пользовательский httphandler, который ищет PDF и что-то с ним делает.

В каждый проект моего решения я включаю Allgemein.dll.

Теперь, если я вышел из приложения и позвонил в pdf, мой httphandler отлично работает.Но если я сейчас вхожу в свое приложение и вызываю pdf, я получаю следующую ошибку: "Не удалось загрузить тип" Allgemein.Handlers.FileProtectionHandler "в сборке" Allgemein "."

Что я делаю не так?

Мой web.config

<httpHandlers>
      <add path="*.pdf" verb="*" validate="true" type="Allgemein.Handlers.FileProtectionHandler, Allgemein" />
</httpHandlers>

<handlers>
      <add name="PDF" path="*.pdf" verb="*" type="Allgemein.Handlers.FileProtectionHandler, Allgemein" resourceType="Unspecified" />
</handlers>

Мой FileProtectionHandler.vb

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

Namespace Allgemein.Handlers
    Public Class FileProtectionHandler : Implements IHttpHandler

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

        Public Sub ProcessRequest(ByVal context As HttpContext)
            Select Case context.Request.HttpMethod
                Case "GET"

                    If Not context.User.Identity.IsAuthenticated Then
                        FormsAuthentication.RedirectToLoginPage()
                        Return
                    End If

                    Dim requestedFile As String = context.Server.MapPath(context.Request.FilePath)

                    If context.User.IsInRole("User") Then
                        SendContentTypeAndFile(context, requestedFile)
                    Else
                        context.Response.Redirect("~/Portal/Fehler403.aspx")
                    End If

                    Exit Select
            End Select
        End Sub

        Private Sub IHttpHandler_ProcessRequest(context As HttpContext) Implements IHttpHandler.ProcessRequest
            Throw New NotImplementedException()
        End Sub

        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
            Dim res As String = Nothing
            Dim fileinfo As FileInfo = New FileInfo(filename)

            If fileinfo.Exists Then

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

                Return res
            End If

            Return Nothing
        End Function

    End Class
End Namespace

enter image description here

enter image description here

enter image description here

1 Ответ

0 голосов
/ 14 февраля 2019

После совместной работы с OP было решено, что MIR.Web.Allgemein является корневым пространством имен.

В этом случае фактическое имя типа будет MIR.Web.Allgemein.Allgemein.Handlers.FileProtectionHandler, которое является корневым пространством имен [точка] фактическим пространством имен из имени класса code [точка].

...