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

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

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

所有项目都是asp.net 4.0:
1.(根):http://example.com
2.(项目1)http://example.com/Project1
3.(我的项目)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

最佳答案

只是想检查您是否已完全安装 .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

关于asp.net 3.5升级到4.0 IIS6 ReturnURL问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963224/

相关文章:

ASP.NET - 部署问题 - 通过 Web.Config 启用堆栈跟踪/跟踪监听器日志以查找内部服务器 500 错误的原因

asp.net - 如何用jQuery模拟表单提交?

asp.net - HTTP 错误 500.19 和错误代码 : 0x80070021 while configuring IIS server

c# - Entity Framework - CSDL、SSDL 和 MSL 文件

visual-studio-2010 - mscorlib.dll 中发生了 'System.ServiceModel.CommunicationException' 类型的未处理异常

c# - Curiously Recurring Template Pattern 是否有替代方案?

asp.net-core - 为 LetsEncrypt 设置 web.config - 使用 Asp.NET Core 和 Angular 2 进行认证(Javascript 服务)

c# - 在 vb.net 中绕过代理服务器

c# - 验证失败时如何检查 EntityValidationErrors?

javascript - 从用户控件内部关闭 jQuery 对话框