我已经将.Net 3.5中的WebForms应用程序移动到.Net 4.唯一的变化是web.config删除了3.5扩展,因为它们现在是.Net 4的一部分。
我在使用FormsAuthentication和自定义主体安全的站点中有以下applet标记(Persists software JUpload control):
<APPLET
id="UploadCtl"
CODE="persits.transfer.gui.UploadUI.class"
ARCHIVE="JUpload.jar"
WIDTH="99%" HEIGHT="200"
NAME="JUpload" MAYSCRIPT="yes"
>
<PARAM NAME="cabbase" VALUE="JUpload.cab" />
<PARAM NAME="UseSockets" VALUE="false" />
<param name="DNDOverrideEnabled" value="true" />
<PARAM NAME="ShowTransferButton" VALUE="false" />
<PARAM NAME="AllowAddFiles" VALUE="true" />
<param name="AllowRemoveFiles" value="true" />
<param name="UploadURL" value="/site/manageDocumentsPost.aspx" />
<param name="FinalURL" value="/site/manageDocuments.aspx" />
<PARAM NAME="DebugInformation" VALUE="true">
<param name="MaxFileSize" value="2500" />
<PARAM NAME="Cookie1" VALUE="ASP.NET_SessionId=<% =SessionId %>">
<PARAM NAME="Cookie2" VALUE="<%=FormsCookieName %>=<%=FormsCookieValue %>">
</APPLET>
基本上,控件将发布到UploadURL中指定的url。这两个cookie参数用于确保用户的SessionId和FormsAuthTicket在上传时由上传小程序发送。
正如我所说,这在.Net 3.5(CLR 2.0)中完美运行。转移到.Net 4,CLR4,似乎发生的事情是/site/ManageDocumentsPost.aspx的请求被重定向到登录页面,然后控件显示此假定上传正常。帖子页面实际上从未实际执行过它的代码(帖子应该不返回任何内容,从而导致控件要求FinalUrl)。
使用Fiddler我可以看到manageDocumentsPost导致重定向,并且此重定向具有不同的Asp.Net SessionId。
任何可能导致此变化的想法?更重要的是,任何让它再次运作的想法?
由于 安迪
答案 0 :(得分:0)
好的,我想出了如何让它发挥作用。
之前我将主体存储在会话中,并加载到AquireSessionState事件中。
现在我在登录期间将主体存储在缓存中,并将一些信息写入故障单,以便我在缓存中找到它。
在AuthenticateRequest事件中,如果用户经过身份验证,我可以轻松找到实际的主体并从缓存中获取。由于某种原因,虽然控件导致此事件触发未经身份验证,但会话和formsauthcookie都存在于请求中。我解密了auth cookie,然后使用故障单中的信息再次找到委托人。
通过这种方式,用户可以在事件处理程序结束时进行身份验证,一切都可以正常进行。
希望能帮助别人。