Я недавно обновил проект с 3.5 до 4.0, все прошло отлично, кроме ReturnUrl не делает то, что он использует. Структура проекта:
Все проекты asp.net 4.0:
1. (корень): http://example.com
2. (Проект1) http://example.com/Project1
3. (MyProject) http://example.com/MyProject <- Виртуальный каталог. Этот проект имеет проблемы. <br />
Вот мой web.config:
<?xml version="1.0"?>
<configuration>
<configSections>
...
</configSections>
<!--System.net Mail setup-->
<system.net>
<mailSettings>
<smtp from="support@localhost">
<network host="localhost" port="25" defaultCredentials="true"/>
</smtp>
</mailSettings>
</system.net>
<appSettings>
...
<add key="loginUrl" value="Login.aspx" />
<add key="defaultUrl" value="Home.aspx" />
</appSettings>
<connectionStrings>
<clear/>
<add name="LocalSqlServer" connectionString="Data Source=localhost;Initial Catalog=aspnetdb_test;Integrated Security=True" providerName="System.Data.SqlClient"/>
...
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
...
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies>
</compilation>
<customErrors mode="Off"/>
<!--<customErrors mode="On" defaultRedirect="ErrorPage.aspx">
<error statusCode="403" redirect="PageNotFound.aspx"/>
<error statusCode="404" redirect="PageNotFound.aspx"/>
</customErrors>-->
<pages enableSessionState="true" validateRequest="false" enableEventValidation="true" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
<controls>
...
</controls>
</pages>
<httpHandlers>
...
</httpHandlers>
<httpModules>
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
...
</httpModules>
<httpRuntime maxRequestLength="458292"/>
<authentication mode="Forms">
<!--<forms loginUrl="~/Login.aspx" defaultUrl="~/Home.aspx" protection="All" timeout="60" name=".ASPXFORMSAUTH" requireSSL="false" slidingExpiration="true" cookieless="UseCookies" enableCrossAppRedirects="false"/>-->
<forms loginUrl="Login.aspx" protection="All" timeout="60" name=".ASPXFORMSAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="Home.aspx" cookieless="UseCookies" enableCrossAppRedirects="false" />
</authentication>
<authorization>
<allow roles="Admin"/>
<allow roles="Student"/>
<allow roles="Test"/>
<deny users="*"/>
<deny users="?"/>
</authorization>
<machineKey validationKey="..." decryptionKey="..." validation="SHA1"/>
<membership defaultProvider="MembershipProvider">
<providers>
...
</providers>
</membership>
<roleManager enabled="true" defaultProvider="RoleManagerSqlProvider">
<providers>
...
</providers>
</roleManager>
<httpCookies httpOnlyCookies="true"/>
<sessionState cookieless="AutoDetect"/>
<trace enabled="false"/>
</system.web>
<location path="Home.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="Logout.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="AJAXServices">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="SignIn.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="ResetPassword.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="About.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="ErrorPage.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="PageNotFound.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="Assets">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<!--
The system.webServer section is required for running ASP.NET AJAX under Internet
Information Services 7.0. It is not necessary for previous version of IIS.
-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
...
</modules>
<handlers>
...
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
</assemblyBinding>
</runtime>
</location>
</configuration>
Единственное временное исправление, которое действительно помогает, это Global.asax.cs
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.AppRelativeCurrentExecutionFilePath == "~/")
HttpContext.Current.RewritePath("Home.aspx");
}
Тем не менее, в IE 8/9, если перейти к http://example.com/MyProject, произойдет сбой, но если я сделаю это:
http://example.com/MyProject/ (добавлено /) работает. Разве defaultUrl не предполагает перенаправления в основное приложение? И почему returnUrl указывает на
http://example.com/MyProject/Login.aspx?ReturnUrl=%2fMyProject%2f
Я искал в Google и даже на этом сайте бесчисленные решения, но ни одно из них не помогло мне. Возможно, из-за того, что этот проект находится в подкаталоге других проектов и имеет конфликт web.config.
Кстати в Методах Аутентификации в IIS Включить анонимный доступ проверено и больше ничего не проверено.
Я не знаю, что еще может быть, что это отбрасывает. Я пытался сделать Home.aspx главной страницей или Login.aspx не имеет значения.
Дополнительная информация:
C:\WINDOWS\system32>cscript IisExt.vbs /ListFile
Status / Extension Path
------------------------
0 C:\WINDOWS\system32\inetsrv\httpodbc.dll
1 C:\WINDOWS\system32\inetsrv\ssinc.dll
1 C:\WINDOWS\system32\inetsrv\asp.dll
1 C:\ColdFusion9\runtime\lib\wsconfig\jrun_iis6.dll
1 C:\ColdFusion9\runtime\lib\wsconfig\1\jrun_iis6_wildcard.dll
0 *.exe
0 C:\WINDOWS\system32\inetsrv\httpext.dll
0 *.dll
1 c:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll
1 C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll
Также:
C:\WINDOWS\microsoft.net\Framework64\v4.0.30319>aspnet_regiis -lk
W3SVC/ 4.0.30319.0
W3SVC/1971902459/root/ 4.0.30319.0
W3SVC/1971902459/root/Project1/ 4.0.30319.0
W3SVC/1971902459/root/MyProject/ 4.0.30319.0
W3SVC/53091907/root/ 4.0.30319.0