2011-03-03 14 views
9

Tengo un problema con el archivo de configuración web de ASP.NET. Quiero negarle a algunos usuarios o roles el acceso a un archivo PDF específico. Estoy usando la membresía ASP.NET y el sistema de gestión de roles. Por lo que añade estas líneas de códigos en un archivo Web.config:¿Cómo denegar el acceso a un archivo con la configuración web de ASP.NET pero no solo localmente?

<location path="myfile.pdf"> 
    <system.web> 
     <authorization> 
      <allow roles="admin"/> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 

y lo puso a la bruja directorio del archivo se incluye en ella. Ahora cuando ejecuto el proyecto en el sistema local no puedo acceder al archivo PDF mientras inicio sesión con el rol de "administrador". Pero cuando publico el proyecto en el servidor web, no puedo examinar la carpeta, pero puedo ver el archivo PDF cuando navego por la ruta completa al archivo PDF. Por lo tanto:

No puedo acceder a: http://www.example.com/folder

pero puedo ver: http://www.example.com/folder/myfile.pdf

Respuesta

11

IIS es, probablemente, sirviendo el archivo PDF antes de ASP.Net obtiene sus manos en él. Suponiendo que está usando .Net 4.0, agregar esto a su archivo Web.config para obligar a todas las solicitudes para fluir a través de ASP.Net:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
<system.webServer> 
2

Necesitas hacer peticiones de IIS hacia adelante PDF en ASP.NET para su cosas para tener lugar.

Ejemplo artículo:

Citando parte pertinente del artículo:

El enganchar archivos PDF en la aplicación Web con IIS

Era la prueba fácil el HTTP personalizado controlador en el servidor web integrado de Visual Studio , Cassini, ya que todos los tipos de documento se procesan automáticamente en en la aplicación web por defecto . Sin embargo, IIS necesita unos pocos ajustes de . IIS ignorará el envío de solicitudes para documentos estáticos, como archivos PDF , a la aplicación ASP .NET web y en su lugar simplemente atenderá la solicitud. Necesitamos interceptar la solicitud y permitir que nuestra aplicación web la procese primero. Para hacer esto, necesitaremos configurar una asignación IIS para archivos PDF (* .pdf), indicando IIS para enviar la solicitud a nuestra aplicación web .

En IIS 5/6

  1. abiertas de Internet Information Services (IIS).
  2. Para su aplicación web, en la pestaña Directorio, haga clic en el botón Configuración .
  3. En la ficha Asignaciones de la ventana Configuración de la aplicación, , haga clic en el botón Agregar para agregar una nueva Asignación de extensión de aplicación .
  4. En el campo Ejecutable, ingrese: C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll

  5. En el campo Extensión, escriba: * .pdf

  6. Seleccione todos los verbos y la marca de verificación del motor de guiones y compruebe que el archivo existe .

En IIS 7

  1. abiertas de Internet Information Services (IIS).
  2. Abra la configuración Asignaciones de controlador.
  3. Agregue un controlador administrado.
  4. Para Ruta de solicitud, escriba: * .pdf
  5. Para Tipo, seleccione el controlador HTTP personalizado para la aplicación.

un acceso directo a esta en IIS 7, como se mencionó anteriormente en el artículo, es definir el mapeo en el web.config dentro de los manipuladores system.webServer sección, como sigue:

<system.webServer> 
... 
<handlers> 
<add name="PDF" path="*.pdf" verb="*" type="CustomFileHandlerDemo.Handlers.FileProtectionHandler" resourceType="Unspecified" /> 
... 
</handlers> 
</system.webServer> 

el código anterior en la web web.config de aplicación se agregar automáticamente la entrada en el IIS 7 Sección Asignaciones de manejador.

Los pasos anteriores pueden ser diferentes dependiendo en su versión de IIS, pero deben ser similar para añadir un mapeo documento a la aplicación web. Una vez configurado , las solicitudes de documentos PDF se enviarán a la aplicación web, , donde puede procesar la solicitud antes de permitir el acceso.

Recuerde, en Visual Studio integrado servidor web, las asignaciones de módulo no son necesaria, ya que todas las peticiones de archivos van a través de la aplicación web, por lo que es fácil de probar el controlador personalizado http.

Como no utiliza el controlador personalizado, solo necesita establecer el controlador en el controlador predeterminado de ASP.NET. Este es el mismo controlador establecido en ".aspx" ya en IIS.

Cuestiones relacionadas