我最近将一个项目从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
答案 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。
尝试一下,希望你的困境不复存在。