2

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

" 在 System.Threading.Thread.AbortInternal()\r\n 在 System.Threading.Thread.Abort(Object stateInfo)\r\n 在 System.Web.HttpResponse.End () \r\n 在 DotNetOpenAuth.Messaging。 OutgoingWebResponse.Send(HttpContext context) 在 c:\BuildAgent\work\a02b428f36957bca\src\DotNetOpenAuth\Messaging\OutgoingWebResponse.cs:line 161\r\n 在 DotNetOpenAuth.Messaging.OutgoingWebResponse.Send() 在 c:\BuildAgent\work \a02b428f36957bca\src\ DotNetOpenAuth \Messaging\OutgoingWebResponse.cs:131 行\r\n 在 DotNetOpenAuth.OpenId.RelyingParty.AuthenticationRequest.RedirectToProvider ()

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

4

1 回答 1

3

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

如果你在 MVC 中,你可以使用RedirectingResponse.AsActionResult()并返回它来避免异常。

于 2011-12-06T14:24:02.277 回答