asp.net 3.5 обновление до 4.0 IIS6 ReturnURL проблемы - PullRequest
4 голосов
/ 01 ноября 2011

Я недавно обновил проект с 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

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

Не уверен насчет настройки URL-адреса по умолчанию в конфигурации, никогда раньше не пробовал.Мы всегда устанавливаем это в свойствах IIS для приложения.Может быть, проверить это?

Вы можете проверить это:

Щелкните правой кнопкой мыши приложение в диспетчере IIS, выберите «Свойства», перейдите на вкладку «Документы», установите флажок «Включить страницу содержимого по умолчанию»,и убедитесь, что правильная страница находится в списке.

1 голос
/ 10 ноября 2011

Я полагаю, что добавленная в ASP.NET 4 функция URL-адреса без расширения вызывает некоторые проблемы.У Томаса Марквардта есть запись в блоге об отключении этой функции здесь .

Попробуйте и, надеюсь, ваши беды исчезнут.

1 голос
/ 04 ноября 2011

Просто хочу убедиться, что у вас установлена ​​.Net 4.0 полностью.Как и на IIS6, могут быть некоторые странные ошибки с .Net 4.0.

Даже если вы установили его и настроили в IIS как правильный пул приложений, из коробки оно все равно не будет работать.

Используйте следующее руководство, чтобы убедиться, что .dll для .Net 4.0 зарегистрирована, в противном случае вы получите частично работающее приложение.

http://johan.driessen.se/posts/getting-an-asp.net-4-application-to-work-on-iis6

...