2011-05-06 24 views
9

Mi sitio ASP.NET Forms 4.0 se está ejecutando con autenticación de formularios. Por defecto, los usuarios no autorizados son denegados, y luego dejo acceso a ciertas páginas. Tengo un problema para acceder a la URL predeterminada: http: /example.com. Tengo esta entrada en web.config que define la página por defecto:Permitir acceso anónimo a la página predeterminada

<defaultDocument> 
    <files> 
     <clear/> 
     <add value="default.aspx" /> 
    </files> 
</defaultDocument> 

y tengo esta anulación ubicación:

<location path="default.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="?"/> 
     </authorization> 
    </system.web> 
</location> 

Funciona bien cuando voy a la plena url: http://example.com/default.aspx, pero vuelve a dirigir a la página de inicio de sesión si voy a http://example.com

¿Alguna idea de qué estoy haciendo mal?

+0

Sé lo que está haciendo mal: 'path' coincide con la ruta que se solicitó y no la ruta a la que se redirigió (en el lado del servidor), por lo que http://mysite.com no coincide con el valor predeterminado. aspx. No obstante, no puedo ayudarte a solucionarlo :( – Ryan

+0

Consulta mi respuesta sobre la eliminación de los módulos ExtensionlessUrl [Autenticación de formularios ignorando el documento predeterminado:] (http://stackoverflow.com/questions/3824951/forms-authentication-ignoring-default -document) –

Respuesta

10

acabo encontrado respuesta en una respuesta (por Dmitry) a una pregunta similar aquí en SO: Forms Authentication Ignoring Default Document:

En Global.asax, método: Application_BeginRequest, coloque el siguiente:

if (Request.AppRelativeCurrentExecutionFilePath == "~/") 
    HttpContext.Current.RewritePath("default.aspx"); 

Trabajado ¡como el encanto!

+0

Me salvó un montón de dolor de cabeza ... sí, es 2015 y todavía estoy usando formularios web. ¡Gracias! –

-2

Esto funciona para mí en una aplicación web de prueba:

<location path=""> 
    <system.web> 
     <authorization> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 

<location path="Default.aspx"> 
    <system.web> 
     <authorization> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 

Ahora no puede llegar a cualquiera "/" o "/Default.aspx" - Inténtelo (pero el uso allow en su lugar) .

+1

No me gustó - IIS arrojó un error que la ruta está vacía. – Andrey

+0

Bien, no estaba seguro ... lo siento! –

+1

@Josh - ¿puedes borrar tu respuesta para que no engañe a los demás? No quería rechazarlo :) – Andrey

3

Acabo de descubrir cómo solucionar esto sin tener que cambiar el rumbo de una redirección.

Si me acaba de pasar después de convertir de .Net 2 a .Net 4 y nunca he encontrado mi solución en ningún lugar en Internet, así que aquí va.

Si como yo, su página de inicio de sesión también es su página predeterminada que necesita para asegurarse de que las dos cosas siguientes en el archivo web.config

añadir esto a eximir a default.aspx de autenticación (no lo hizo necesitará en .Net 2)

<location path="default.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

Y cambiar la URL de inicio de sesión de este

<forms name="myform" loginUrl="~/default.aspx" timeout="240" defaultUrl="~/home.aspx" slidingExpiration="true" protection="All" path="/" /> 

a este

<forms name="myform" loginUrl="~/" timeout="240" defaultUrl="~/home.aspx" slidingExpiration="true" protection="All" path="/" /> 

y se debe imponer una multa todos los ahoras de trabajo, simplemente probé en dos sitios diferentes y lo hizo el truco para mí

+0

Realmente no es una solución. Acaba de cambiar su url de autenticación (login.aspx) a su raíz. Podría darle una solución ahora ... pero yo altamente consejo contra eso. –

1

que no me gusta hacer un cambio de código para este problema, sobre todo porque mi sitio funcionaba bien en mi máquina con Windows Server 2008 R2, pero no en mi máquina de desarrollo Windows 7 SP1.

Resulta que la causa principal de este problema es una actualización en el Service Pack 1 para Windows 7:

http://support.microsoft.com/kb/2526854

La solución parece ser la de desactivar la nueva característica "ExtensionlessUrl" que se agregó en el SP1:

<system.webServer> 

    <handlers> 
    <remove name="ExtensionlessUrl-ISAPI-4.0_32bit" /> 
    <remove name="ExtensionlessUrl-ISAPI-4.0_64bit" /> 
    <remove name="ExtensionlessUrl-Integrated-4.0" /> 
    </handlers> 

    <validation validateIntegratedModeConfiguration="false" /> 

</system.webServer> 

Obviamente, si usted está utilizando la función de ExtensionlessUrl esto no va a trabajar para usted, pero yo he documentado aquí para aquellos migración de un sitio de memoria y no se sabe lo que se vaya pronto ne mal

Cuestiones relacionadas