tutorial net mvc example asp asp.net-mvc asp.net-mvc-5 owin

asp.net-mvc - net - mvc authentication identity



OwinStartup no dispara (19)

Tenía el código de configuración de OwinStartup funcionando perfectamente y luego dejó de funcionar. Desafortunadamente, no estoy seguro exactamente de lo que hice para que dejara de funcionar y me está costando mucho entenderlo.

Para asegurarme de que tengo lo básico cubierto, doblé el control para asegurarme de que tengo el

[assembly:OwinStartup(typeof(WebApplication.Startup))]

asignó el atributo correctamente y se aseguró de que no tengo una aplicación Configuración para owin: AutomaticAppStartup que esté configurada como falsa, así que hice una configuración como verdadera para que no haya nada allí antes.

<add key="owin:AutomaticAppStartup" value="true" />

También traté específicamente de llamar a la aplicación

<add key="owin:appStartup" value="WebApplication.Startup" />

Antes de que dejara de funcionar, actualicé los paquetes de Microsoft.Owin.Security NuGet a 2.0.2, así que intenté revertirlos a 2.0.1 (eso fue un dolor) pero no cambió nada. Tengo WebActivator instalado en el proyecto y lo estoy usando para arrancar otras cosas, pero lo he probado en una nueva plantilla de aplicación web y funciona allí, así que no creo que ese sea el culpable.

También intenté eliminar mi clase de inicio y usar Visual Studio para agregar uno nuevo usando el tipo de clase de inicio de OWIN en Agregar nuevo elemento y tampoco se llama. Luego intenté agregar una segunda clase de inicio, ya que sé que lanzará una excepción si hay más de un atributo de OwinStartup definido, pero no está lanzando ninguna excepción allí.

No estoy seguro de qué más probar. ¿Alguna idea?

Actualizar

Resulta que Resharper eliminó la referencia a Microsoft.Owin.Host.SystemWeb cuando lo usé para eliminar las referencias no utilizadas.


Asegúrese de haber instalado Microsoft.Owin.Host.SystemWeb paquete Microsoft.Owin.Host.SystemWeb en el proyecto. Este paquete es necesario para la detección de inicio en aplicaciones alojadas en IIS. Para más información puedes consultar this artículo.


Después de convertir una biblioteca de clases en un proyecto de aplicación web , me encontré con esto y me volví terco. Resultó, en mi archivo .csProj , tuve esto:

<PropertyGroup Condition=" ''$(Configuration)|$(Platform)'' == ''Debug|AnyCPU'' "> <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>bin/Debug/</OutputPath> <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> <PropertyGroup Condition=" ''$(Configuration)|$(Platform)'' == ''Release|AnyCPU'' "> <DebugType>pdbonly</DebugType> <Optimize>true</Optimize> <OutputPath>bin/Release/</OutputPath> <DefineConstants>TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup>

  • así construyendo los diversos archivos DLL en una subcarpeta de la carpeta bin (que ifc. no funcionará). La solución fue cambiar ambos contenidos de texto para OutputPath a solo bin/ .

En mi caso, el grupo de aplicaciones IIS no se configuró en v4. Fue v2.

Cambié el AppPool a v4 y todo estuvo bien.


En mi caso, este paquete Microsoft.Owin.Host.SystemWeb está presente en el proyecto.

Pero a continuación, dos etiquetas no están presentes en web.config.

<add key="owin:AutomaticAppStartup" value="true" /> <add key="owin:appStartup" value="namespace.className.methodName" />

Después de agregarlos funciona sin problemas.


En mi caso, la ruta de salida de mi sitio web es cambiada por alguien, el IIS Express incluso no carga OWIN, y la clase de configuración no se verá afectada, por supuesto. Después de configurar la ruta de salida como "bin /", funciona bien.


En mi caso, mi web.config tenía

<authorization> <allow users="?" /> </authorization>

Para obligarlo a volver a Owin, necesitaba que fuera

<authorization> <deny users="*" /> </authorization>


Me metí con muchas de las sugerencias en este post.

Tuve lo siguiente pero todavía no pude aterrizar en un punto de ruptura. Lanzar una excepción probó que el código estaba siendo ingresado.

<appSettings> ... <add key="owin:AutomaticAppStartup" value="true" /> <add key="owin:appStartup" value="SSOResource.Startup, SSOResource" /> ... </appSettings>

Finalmente, por desesperación, miré las propiedades del proyecto> y luego, en la sección WEB, también marqué la casilla de CÓDIGO NATIVO (ASP.NET ya debería estar marcado).

Eso finalmente lo arregló para mí.

Nota: Estoy usando Visual Studio 2017 Professional.


No estoy seguro de si esto seguirá ayudando a alguien, pero he hecho todas las soluciones anteriores (y de otras publicaciones) en vano.

Lo que solucionó el problema en mi final fue poner una barra invertida al final del valor de RedirectUri en web.config (¡loco, lo sé!). RedirectUri es un parámetro en UseOpenIdConnectAuthentication.

Entonces, en lugar de:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home" />

Hacer esto:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home/" />

Y actualizó la URL de respuesta en la configuración de la aplicación de Azure también.

De alguna manera, el inicio se ejecutó como se esperaba (probablemente se borró algo del caché) y los puntos de interrupción ahora se están disparando.

Para tu información Yo estaba modelando mi código desde aquí: https://github.com/microsoftgraph/aspnet-connect-sample


Para mí fue porque no están en el mismo espacio de nombres. Después de quitar mi AppStart de "project.Startup.AppStart" y dejar que Startup.cs y Startup.Auth.cs tengan el espacio de nombres "Project.Startup", todo volvió a funcionar perfectamente.

Espero que te ayude!


Pienso que lo que algunas personas intentaron llegar a lo anterior es que si quiere que su servidor OWIN "se haga realidad" programáticamente, estaría llamando a algo como esto:

using Microsoft.Owin.Hosting; IDisposable _server = WebApp.Start<StartupMethod>("http://+:5000"); // Start Accepting HTTP via all interfaces on port 5000

Una vez que haga esta llamada, verá que la llamada a StartupMethod () se enciende en el depurador


Primero agregue la clase de autenticación OWIN y luego habilite la clave OWIN: AutomaticAppStartup en su web.config como Ahora va a disparar


Respuesta alternativa al problema original discutido: Owin "no está disparando". En mi caso, pasé horas pensando que no se estaba disparando debido a que no podía establecer un punto de interrupción.

Al depurar el inicio de OWIN en visual studio

  • IIS Express: la ejecución de "F5" se interrumpirá en el código de inicio de OWIN

  • IIS: la ejecución de "F5" no se interrumpirá hasta que se cargue el código OWIN (y global.asax). Si se adjunta a W3P.exe, podrá acceder a él.


Si está viendo este problema con el alojamiento de IIS, pero no cuando la depuración F5, intente crear una nueva aplicación en IIS.

Esto me lo arregló. (Windows 10) Al final, eliminé la aplicación IIS "incorrecta" y volví a crear una idéntica con el mismo nombre.


Si ha actualizado desde una versión anterior de MVC, asegúrese de no tener

<add key="owin:AutomaticAppStartup" value="false" />

en su web.config . Se suprimirá llamando a la lógica de inicio.

En su lugar, cambiarlo a true

<add key="owin:AutomaticAppStartup" value="true" />

Me doy cuenta de que ya mencionaste esto, pero a veces las personas (como yo) no leen la pregunta completa y simplemente saltan a las respuestas ...

En algún lugar a lo largo de la línea, cuando actualicé a MVC 5 esto se agregó y nunca lo vi hasta hoy.


Si tiene problemas para depurar el código en la clase de Startup , también he tenido este problema, o pensé que sí. El código se estaba activando, pero creo que sucede antes de que el depurador se haya conectado, por lo que no puede establecer puntos de interrupción en el código y ver qué está sucediendo.

Puede probar esto lanzando una excepción en el método de Configuration de la clase de Startup .


Tuve el mismo problema cuando agregué Owin a un proyecto web existente. Finalmente encontré que el problema se debía a lo siguiente en el archivo web.config.

<assemblies> <remove assembly="*" /> <add assembly="System.Web.Mvc" /> <add assembly="System.Web.WebPages" /> ... </assemblies>

La eliminación de ensamblaje = "*" estaba causando el problema. Cuando quito esta línea se ejecutó el código de inicio de Owin. Eventualmente lo cambio a lo siguiente y funcionó perfectamente.

<assemblies> <remove assembly="*" /> <add assembly="Microsoft.Owin.Host.SystemWeb" /> <add assembly="System.Web.Mvc" /> <add assembly="System.Web.WebPages" /> <add assembly="System.Web.Helpers" /> ... </assemblies>


Tuve un problema similar a este y al borrar los archivos temporales de ASP.NET lo solucioné. Espero que esto ayude a alguien.


Yo tuve el mismo problema. El paquete Microsoft.Owin.Host.SystemWeb se instaló, pero durante la instalación, NuGet no pudo agregar la dll como referencia por algún motivo. Asegúrate de que tu proyecto tenga esa referencia. Si no puede intentar reinstalar:

update-package Microsoft.Owin.Host.SystemWeb -reinstall

Tuve un error como el siguiente en la reinstalación, pero de alguna manera funcionó:

Falló la llamada al sistema. (Excepción de HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))


CONSEJOS DE DEBUGGING

Si la depuración no funciona, intente usar IIS Express o pruebe el método a continuación para IIS local

Usando IIS local

Por alguna razón, este método permite la depuración de este método:

  1. Solicitar una página web
  2. Adjuntar al proceso w3wp.exe
  3. Toque el archivo web.config
  4. Solicitar una página web

Punta extra

Tal vez hacer esto va a vaciar un caché:

  1. En web.config agregue el atributo OptimizeCompilations con un valor falso

    <compilation debug = "true" ... OptimizeCompilations = "false">

  2. Sitio de ejecución

  3. Deshacer el cambio en web.config