asp.net 3.5升级到4.0 IIS6 ReturnURL问题

时间:2011-11-01 06:37:15

标签: asp.net c#-4.0 web-config iis-6

我最近将一个项目从3.5升级到4.0,一切都很顺利,除了ReturnUrl没有做它的用途。项目结构:

所有项目都是asp.net 4.0:
1.(root):http://example.com
2.(Project1)http://example.com/Project1
3.(MyProject)http://example.com/MyProject< - 虚拟目录。这个项目有问题。

这是我的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

我搜索谷歌甚至这个网站有无数的解决方案,但似乎没有人为我解决它。也许是因为这个项目位于其他项目的子目录中并且存在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 个答案:

答案 0 :(得分:1)

只想检查您是否已完全安装.Net 4.0。与IIS6一样,.Net 4.0可能存在一些奇怪的错误。

即使您已经安装了它并在IIS中将其设置为正确的应用程序池,开箱即用它仍然无法正常工作。

使用以下指南确保.Net 4.0的.dll已注册,否则您将最终使用部分工作应用。

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

答案 1 :(得分:1)

不确定在配置中设置默认网址,以前从未尝试过。我们总是在应用程序的IIS属性中设置它。也许检查一下?

您可以通过以下方式查看:

右键单击IIS管理器中的应用程序,单击属性,单击“文档”选项卡,选中“启用默认内容页面”复选框,并确保列表框中包含正确的页面。

答案 2 :(得分:1)

我认为ASP.NET 4中引入的无扩展url功能会导致一些问题。 Thomas Marquardt有一篇关于禁用此功能的博文here

尝试一下,希望你的困境不复存在。