gpt4 book ai didi

c# - 为什么在调用 HtmlHelper.AntiForgeryToken 时会出现 TypeInitializationException?

转载 作者:行者123 更新时间:2023-11-30 21:20:47 25 4
gpt4 key购买 nike

序言

我已经搜索过是否可以在这里的任何地方找到这个问题,但我找不到。我 previously asked on meta如果在 SO 上报告错误是有效的。

共识是我应该在源头上报告错误,如果我有社区意识,也许可以在 SO 上提问和回答问题,以便其他人可能会遇到它。所以我现在开始做我的社区工作。

问题

我有一个调用 Html.AntiForgeryToken 的 MVC View ,它在 FormatterGenerator 中抛出一个 TypeInitializationException。堆栈跟踪如下(为滚动条道歉):

The virtual path '[path]' maps to another application, which is not allowed[ArgumentException: The virtual path '/Asp%20Net%20Bug%202008/Account/Register' maps to another application, which is not allowed.]   System.Web.CachedPathData.GetVirtualPathData(VirtualPath virtualPath, Boolean permitPathsOutsideApp) +11193138   System.Web.HttpContext.GetFilePathData() +61   System.Web.Configuration.HttpCapabilitiesBase.GetBrowserCapabilities(HttpRequest request) +124   System.Web.HttpRequest.get_Browser() +168   System.Web.UI.Page.SetIntrinsics(HttpContext context, Boolean allowAsync) +207   System.Web.UI.Page.ProcessRequest(HttpContext context) +232   System.Web.Mvc.TokenPersister.CreateFormatterGenerator() +459   System.Web.Mvc.FormatterGenerator..cctor() +10[TypeInitializationException: The type initializer for 'FormatterGenerator' threw an exception.]   System.Web.Mvc.AntiForgeryDataSerializer.get_Formatter() +38   System.Web.Mvc.AntiForgeryDataSerializer.Serialize(AntiForgeryData token) +181   System.Web.Mvc.HtmlHelper.GetAntiForgeryTokenAndSetCookie(String salt, String domain, String path) +405   System.Web.Mvc.HtmlHelper.AntiForgeryToken(String salt, String domain, String path) +13   System.Web.Mvc.HtmlHelper.AntiForgeryToken() +17   ASP.views_account_register_aspx.__RenderregisterContent(HtmlTextWriter __w, Control parameterContainer) in c:\Users\andras.zoltan\documents\visual studio 2008\projects\aspnetbug2008\aspnetbug2008\Views\Account\Register.aspx:17   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +115   ASP.views_shared_site_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in c:\Users\andras.zoltan\documents\visual studio 2008\projects\aspnetbug2008\aspnetbug2008\Views\Shared\Site.Master:26   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +115   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +240   System.Web.UI.Page.Render(HtmlTextWriter writer) +38   System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +89   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4240

更奇怪的是,一个同事在加载项目并运行时没有得到这个问题。

我的环境是VS2008,IIS7.5;这是一个 MVC2 项目。

最佳答案

这是 Asp.Net Mvc 中的一个错误(肯定是 2 个,也可能是 1 个),我在博客上写过关于 here 的错误(如果我的博客打开时出现错误 - 只需刷新!),我已向 MVC 团队报告 here .

如果 Web 应用程序托管在包含空格的虚拟目录中,则 MVC 用于为防伪 token 生成数据序列化程序的内部机制将无法工作。它使用伪造的 Asp.Net 页面请求,但它伪造请求的方式导致 URL 验证失败并错误地将 URL 标识为在当前应用程序之外。

当前的解决方法是从应用程序的目录名称中删除空格 - 连字符是一个不错的选择。我相信路径中任何需要 URL 编码的字符都可能是个问题。

如果您在您的 Web 项目中允许每个开发人员拥有自己的 Web 绑定(bind),那么您可能会收到此错误而同事不会收到此错误的原因是。 Web 项目的默认设置是使用 Cassini - 当然不会有这个问题。

关于c# - 为什么在调用 HtmlHelper.AntiForgeryToken 时会出现 TypeInitializationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3084491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com