2011-12-05 25 views
2

With DotNetOpenAuth-3.4.7.11121我收到System.Threading。 ThreadAbortException当调用DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationRequest RedirectToProvider()方法。我的调用堆栈看起来像DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationRequest RedirectToProvider()ThreadAbortException

“在System.Threading.Thread.AbortInternal(个)\ r \ n在 System.Threading.Thread.Abort(对象将stateInfo)\ r \ n在 的System.Web。HttpResponse.End() \在 DotNetOpenAuth.Messaging.OutgoingWebResponse.Send(HttpContext的上下文) 在 C R \ N:\ BuildAgent \工作\ a02b428f36957bca \ SRC \ DotNetOpenAuth \消息\ OutgoingWebResponse.cs:线 161 \ r \ n在DotNetOpenAuth.Messaging.OutgoingWebResponse.Send() c:\ BuildAgent \ work \ a02b428f36957bca \ src \ DotNetOpenAuth \ Messaging \ OutgoingWebResponse.cs:行 131 \ r \ n在 DotNetOpenAuth.OpenId.RelyingParty.AuthenticationRequest。 RedirectToProvider()

我能做些什么来防止这种情况?

回答

3

这是设计。 DotNetOpenAuth调用ASP.NET Response.Redirect(),它本身会抛出ThreadAbortException以终止当前页面上的执行。如果您使用的是网页表单,这很重要,因为它会阻止ASP.NET或页面在DNOA响应消息之后写入额外的HTML,从而破坏消息。

如果您使用的是MVC,则可以使用RedirectingResponse.AsActionResult()并返回以避免该异常。

相关问题