Microsoft.Owin.StaticFiles funciona en el host de la consola pero obtengo un 404 en IIS en solicitudes de archivos

StackOverflow https://stackoverflow.com//questions/25071894

  •  26-12-2019
  •  | 
  •  

Pregunta

Tengo Microsoft.Owin.FileServer (v2.1.0) configurado en mi canalización de Owin y configurar FileServerOptions con EnableDirectoryBrowsing = true funciona muy bien para mostrar el contenido del directorio tanto en el host de mi consola como en iisexpress.

Es cuando intento ver un archivo en particular (es decir, la parte StaticFiles) que tengo problemas en iisexpress.Todavía funciona muy bien en el host de la consola, pero en iisexpress obtengo un 404:

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

Most likely causes:
- The directory or file specified does not exist on the Web server.
- The URL contains a typographical error.
- A custom filter or module, such as URLScan, restricts access to the file.

Tengo la última versión de Microsoft.Owin.Host.SystemWeb a la que se hace referencia en el servidor web.

¿Fue útil?

Solución

Agregar <modules runAllManagedModulesForAllRequests="true"> no funcionó para mí (VS2013, IIS Express).

Forzando todas las solicitudes para usar el oleoducto OWIN hizo:

(en web.config)

<configuration>
  <system.webServer>
    <handlers>
      <add name="Owin" verb="" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb"/>
    </handlers>
  </system.webServer>
</configuration>

Otros consejos

Tuve que agregar la siguiente configuración:

<modules runAllManagedModulesForAllRequests="true">

Para obtener el módulo que Microsoft.owin.host.systemweb se registra automáticamente para ejecutarse para rutas como rutas como * .txt, * .js que IIS estaba asumiendo que los archivos estáticos se ejecutan a través del oleoducto.

Esta configuración tiene implicaciones de rendimiento para los archivos estáticos reales, pero esto funciona para mí.

He tenido problemas con esto durante las últimas horas; agregar el controlador a continuación funcionó, sin embargo, no creo que este fuera el enfoque correcto, causó public void Configuration(IAppBuilder appBuilder) ser invocado dos veces.

<add name="Owin" verb="" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb"/>

Leí un poco y encontré https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipelinelo que luego me lleva a usar UseStageMarked().

Así que ahora mi llamado a UseStaticFiles() es seguido por un llamado a UseStageMarker() al igual que:

appBuilder.UseStaticFiles();
//allows owin middlwares to be executed earlier on in the pipeline.
appBuilder.UseStageMarker(PipelineStage.Authenticate);

Hay una muy buena lectura al respecto aquí:

Puedes encontrar UseStageMarker dentro de Microsoft.Owin paquete aquí: https://www.nuget.org/packages/Microsoft.Owin/

Espero que esto ayude a alguien más.

Gracias

esteban

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top