OWIN Класс запуска не обнаружен - PullRequest
0 голосов
/ 21 марта 2020

Я пытался внедрить OWIN WS Federation в существующее приложение. Это веб-приложение в asp. net VB. Я добавил все ссылки из Nugetpackages Добавлен список ссылок

Затем я добавил класс запуска в 2 файла как класс Partial.

StartupAuth.vb :

Imports System.Configuration
Imports System.Globalization
Imports System.Threading.Tasks
Imports Microsoft.Owin.Extensions
Imports Microsoft.Owin.Security
Imports Microsoft.Owin.Security.Cookies
Imports Microsoft.Owin.Security.WsFederation
Imports Owin

Partial Public Class Startup
    Private Shared realm As String = ConfigurationManager.AppSettings("ida:Wtrealm")
    Private Shared adfsMetadata As String = ConfigurationManager.AppSettings("ida:ADFSMetadata")

    Public Sub ConfigureAuth(app As IAppBuilder)
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType)

        app.UseCookieAuthentication(New CookieAuthenticationOptions())

        app.UseWsFederationAuthentication(New WsFederationAuthenticationOptions() With {
            .Wtrealm = realm,
            .MetadataAddress = adfsMetadata
        })
        ' This makes any middleware defined above this line run before the Authorization rule is applied in web.config
        app.UseStageMarker(PipelineStage.Authenticate)
    End Sub
End Class

и Startup.vb:

Imports Microsoft.Owin
Imports Owin

<Assembly: OwinStartupAttribute(GetType(Startup))>

Partial Public Class Startup
    Public Sub Configuration(app As IAppBuilder)
        ConfigureAuth(app)
    End Sub
End Class

Я также добавил эти две строки в webconfig:

<add key="owin:HandleAllRequests" value="true" />
<add key="owin:AppStartup" value="Startup.vb" />

Если у кого-то есть какие-либо идеи о том, что происходит, пожалуйста, дайте мне знать.

заранее спасибо.

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

Chrome ошибка при запуске приложения

1 Ответ

0 голосов
/ 14 апреля 2020

Проблема в том, что вы не предоставляете полное имя класса Startup , включая его пространство имен. Даже если вы не используете пространство имен в своих файлах классов, уже настроено глобальное пространство по умолчанию.

Пространство имен по умолчанию определено в настройках вашего проекта как Root пространство имен . Это то же самое, что и название вашего проекта. Проверьте свойства вашего проекта. Он будет находиться в поле Root namespace .

Теперь, если ваш проект называется SomeProject , вы можете настроить его, используя один из следующих параметров:

  1. Использование атрибута: <Assembly: OwinStartupAttribute(GetType(SomeProject.Startup))> (также удалите ключ owin:AppStartup в файле web.config)
  2. Используя ключ web.config: <add key="owin:AppStartup" value="SomeProject.Startup" />

Обратите внимание, как я удалил часть ".vb", так как ключ ожидает полное имя класса, а не имя файла.

Использование web.config переопределяет значение в Атрибуте. Поэтому вам нужно использовать только один из них, а не оба в вашем случае.

вы можете проверить документацию Microsoft , чтобы лучше понять, как OWIN обнаруживает класс Startup .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...