我的任务是将.NET 3.5应用程序从我们的一些旧服务器移到IIS 8.5级服务器上的新位置,并且毫不奇怪,其中一些根本不会运行。
为减轻这种情况,我将所有文件导入到一个新项目中,并遍历所有错误,警告和消息,以解决问题。
应用程序现在启动,但是登录过程(使用FormsAuthentication.RedirectFromLoginPage(UserName.Text, True)
的典型.NET登录过程根本不起作用;它不会对用户进行身份验证。
web.config 文件在authorization
部分中具有以下条目:
<anonymousIdentification enabled="false" />
...
<httpModules>
<add name="ScriptModule"
type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>
<add name="FormsAuthentication"
type="System.Web.Security.FormsAuthenticationModule" />
</httpModules>
...
<authentication mode="Forms">
<forms loginUrl="Default.aspx"
defaultUrl="default.aspx"
slidingExpiration="true"
timeout="20"
name="FORMSAUTHCOOKIE"
protection="All" />
</authentication>
...
<authorization>
<allow users="*"/>
<deny users="?"/>
</authorization>
我用一些虚拟变量修改了后面的代码,以供手表监视...
1 If row.ItemArray.Length <> 0 And Not row("Suspended") Then
2 Session("isadmin") = row("Administrator")
3 Session("email") = row("Email")
4 Session("welcome") = row("Forename") & " " & row("Surname") & " (" & row("Department") & "), logged in"
5 uAdapter.UpdateLastLogin(row("UserName"), row("Password"))
6 FormsAuthentication.RedirectFromLoginPage(UserName.Text, True)
7 Dim y As Boolean = Request.IsAuthenticated
8 Dim x As HttpCookieCollection = Request.Cookies
9 Dim z As HttpCookie = Request.Cookies.Item("FORMSAUTHCOOKIE")
10 Dim a As Int32 = -1
11 Else
12 Msg.Text = "Invalid login details. Please try again."
13 End If
第7行到第10行用于测试和读取代码中不存在的其他值。尽管FormsAuthentication.RedirectFromLoginPage(UserName.Text, True)
的执行没有错误,但即使有其他地方的引用,它也不会重定向到当前页面以外的任何其他页面。另外,执行的第7行的结果为 False 。
没有错误消息。正在从连接返回数据。两种版本的系统在格式上存在差异,但是我将其归结为IIS上的呈现。
有人能发现什么明显的原因为什么不起作用?我在某处错过了什么吗?
答案 0 :(得分:0)
从MSDN文档(link)的“备注”部分:
默认情况下,ReturnUrl变量必须引用 当前的应用程序。如果ReturnUrl引用了其他页面 应用程序或其他服务器上的RedirectFromLoginPage 方法将重定向到DefaultUrl属性中的URL。如果你想 要允许重定向到当前应用程序之外的页面,您必须 使用以下命令将EnableCrossAppRedirects属性设置为true 表单配置元素的enableCrossAppRedirects属性。
这是我的猜测:
很有可能是后者。
答案 1 :(得分:0)
好的。经过大量研究和许多精彩的附带问题,我遇到的问题归结为breaking changes in .NET 4.0。
Microsoft goes into a lot more detail在他们的网站上谈论此问题,但详细内容如下: