使用 UrlHelper.Action 方法生成 url 时出现空引用异常

2023-12-29

由于某种原因,当某些机器人访问该网站时,会生成一个带有UrlHelper.Action方法引发空异常System.Web.HttpServerVarsCollection.Get。我已经做了一些调试,调用堆栈开始尝试从以下位置获取“HTTP_X_ORIGINAL_URL”HttpContextBase.Request.ServerVariables收藏。

如果我直接从浏览器访问相同的地址 - 没问题。该页面是服务器,没有记录错误。它似乎只在被机器人访问时才会发生。

不确定它是否相关,但该站点刚刚迁移到 IIS 7.5。仍在集成模式下使用.NET 2.0。

查看 Reflector 反转的代码,这是唯一可以直接发生 null 异常的地方Get方法是调用this._request.FetchServerVariables。就好像完整的请求没有正确设置一样。

还有其他人遇到过这个问题或发现了解决方法吗?为什么机器人访问时请求的设置会有所不同?

UPDATE:一些额外的调试显示 HttpServerVarsCollection 及其父 HttpRequest 对象已被处置。现在的问题是——如何在请求完成之前暴露 HttpContext.Current 返回的 Request 对象?

HttpServerVarsCollection.Get 方法

public override string Get(string name)
{
    if (!this._populated)
    {
        string simpleServerVar = this.GetSimpleServerVar(name);
        if (simpleServerVar != null)
        {
            return simpleServerVar;
        }
        this.Populate();
    }
    if (this._iis7workerRequest == null)
    {
        return this.GetServerVar(base.BaseGet(name));
    }
    string serverVar = this.GetServerVar(base.BaseGet(name));
    if (string.IsNullOrEmpty(serverVar))
    {
        // Only place null reference can happen
        serverVar = this._request.FetchServerVariable(name);
    }
    return serverVar;
}

完整的堆栈跟踪

NullReferenceException: Object reference not set to an instance of an object.]
   System.Web.HttpServerVarsCollection.Get(String name) +8645730
   System.Collections.Specialized.NameValueCollection.get_Item(String name) +7
   System.Web.Mvc.PathHelpers.GenerateClientUrlInternal(HttpContextBase httpContext, String contentPath) in C:\Dev\Site\MVC\Microsoft\src\SystemWebMvc\Mvc\PathHelpers.cs:39
   System.Web.Mvc.PathHelpers.GenerateClientUrl(HttpContextBase httpContext, String contentPath) in C:\Dev\Site\MVC\Microsoft\src\SystemWebMvc\Mvc\PathHelpers.cs:21
   System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, Boolean includeImplicitMvcValues) in C:\Dev\Site\MVC\Microsoft\src\SystemWebMvc\Mvc\UrlHelper.cs:136
   System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, RouteValueDictionary routeValues) in C:\Dev\Site\MVC\Microsoft\src\SystemWebMvc\Mvc\UrlHelper.cs:101
   System.Web.Mvc.UrlHelper.Action(String actionName, String controllerName, Object routeValues) in C:\Dev\Site\MVC\Microsoft\src\SystemWebMvc\Mvc\UrlHelper.cs:51
   www.CmsExtensions.Document(UrlHelper urlHelper, String path) in C:\Dev\Site\www\Code\CmsExtensions.cs:33
   www.CmsExtensions.Document(UrlHelper urlHelper, Document document) in C:\Dev\Site\www\Code\CmsExtensions.cs:20
   www.<>c__DisplayClass17.<Load>b__c(Document d) in C:\Dev\Site\www\Global.asax.cs:251
   Fringine.Cms.DocumentContentParser.ReplaceDocumentRefs(IResolvingDocumentCache cache, Match match) +258
   Fringine.Cms.<>c__DisplayClass4.<ParseContent>b__2(Match m) +17
   System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat) +234
   System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count, Int32 startat) +28
   System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator) +38
   System.Text.RegularExpressions.Regex.Replace(String input, String pattern, MatchEvaluator evaluator, RegexOptions options) +47
   Fringine.Cms.DocumentContentParser.ParseContent(String content, IResolvingDocumentCache cache) +83
   Fringine.Cms.ResolvingDocumentCache.<Parse>b__0(String d) +21
   Fringine.Cms.DocumentCache.GetParsedData(String id, String content, IDocumentService documentService, Func`2 parser) +216
   Fringine.Cms.ResolvingDocumentCache.Parse(String id, String content) +67
   Fringine.Cms.CachedDocument.GetSummary() +966
   Fringine.Cms.CachedDocument.get_Summary() +19
   ASP.views_document_widget_feeddocumentsummary_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) +841
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +256
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Page.Render(HtmlTextWriter writer) +29
   System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) in C:\Dev\Site\MVC\Microsoft\src\SystemWebMvc\Mvc\ViewPage.cs:107
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266

我遇到了这个问题,但它与 URL 重写模块无关。

就我而言,我不小心在静态字段中缓存了 UrlHelper 的实例,后来的请求遇到了早期请求中已处理的实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 UrlHelper.Action 方法生成 url 时出现空引用异常 的相关文章

随机推荐

  • 在Python中添加到本地命名空间?

    Python 中有没有一种方法可以通过调用函数来添加到本地名称空间 而无需在本地显式分配变量 例如 如下所示 这当然不起作用 因为 locals 返回本地名称空间的副本 其中 print 语句将打印 1 def A B locals pri
  • 我可以在 GWT FileUpload 中指定文件类型吗?

    我有一个 Gwt 应用程序并使用FileUpload允许用户上传文件 仅接受某些类型的文件 并且一旦用户选择要上传的文件类型 我就会进行验证以检查文件类型 但我想知道是否有一种方法可以在上传对话框中仅显示具有某些扩展名的文件 例如 如果用户
  • 如何在 Spring Boot 中验证 JSON 请求?

    我想验证从客户端收到的 JSON 请求 我尝试过使用注释 notnull length min 1 max 8 等 它工作正常 但问题是我无法获取无效时将被调用的字段和消息 尽管如此 我在控制台中收到一条错误消息 违反约束的列表 Const
  • Java 中包含一个布尔值的数组比独立变量小吗?

    我对 SO 的搜索失败了 所以如果这是重复的 请重定向我 有了这个 我的问题是 我从经验和浏览中了解到 Javaboolean存储为 32 位int如果您将其声明为独立值 但声明为 8 位byte如果你在数组中声明它 我的问题如下 哪个内存
  • 模拟包含抽象 val 成员的 Scala 特征

    我正在按照 Martin Fowler 的思路编写 Swing 应用程序演示模型 http martinfowler com eaaDev PresentationModel html图案 我创建的特征包含已由 Swing 组件实现的方法的
  • 即使 cookie 是在另一个应用程序中创建的,如何检查它是否存在? (使用 JS 或 C#)

    我有几个应用程序 其中一个是管理身份验证的中央应用程序 其中一个LogOn页面导入为IFrame到其他应用程序 当 的时候userName and password是正确的 我创建了一个名为userInfo 现在 在当前的应用程序中 我想检
  • 通过长按显示选择指针并突出显示文本视图中的文本

    我有一个 TextView 我想在其上实现 LongClickListner 并选择其中的部分文本 但是选择指针不会出现 文本也不会突出显示 我知道文本被选中 因为当我使用 view getselectionstart 和 view get
  • 当不在 EOF 时 read(2) 可以返回零吗?

    根据 read 2 的手册页 当达到 EOF 时它仅返回零 但是 这似乎是不正确的 有时可能会返回零 也许是因为文件尚未准备好读取 在从磁盘读取文件之前 我应该调用 select 来查看它是否准备好吗 请注意 nBytes 为 1 445
  • 在 UIScrollView 中重写 drawRect 时出现黑色背景

    因此 我尝试覆盖 UIScrollLView 中的drawRect 但是它给了我这个黑色背景 而不是我为 UIScrollView 指定的背景颜色 为什么是这样 如果我删除 drawRect 代码 那么一切都很好 void drawRect
  • 升级到 Safari 7.0.4 后无法设置 Web 检查器断点(本地和远程)

    升级到 OSX 10 9 3 13D65 和 Safari 7 0 4 9537 76 4 后 我无法使用 Safari Web 检查器在我的 cordova 应用程序中设置断点 启用的断点显示为深灰色 禁用的断点显示为浅灰色 调试器 语句
  • 我们可以将 EF 迁移与 MySql 一起使用吗

    有没有办法使用 EntityFramework 4 3 beta 进行 MySql 数据库迁移 我们可以使用 MySql 数据库进行迁移吗 是否可以先使用EF代码进行增量数据库开发 而无需我接触数据库 理论上是的 实际上 您首先需要获取 或
  • 类型为“std::vector”的变量成员的类图

    class Foo class Demo public std vector
  • Bootstrap 3 glyphicon 点击​​时交换状态

    帮助 我希望在 bootstrap 3 中折叠时交换字形图像 我在这里找到了这个线程Bootstrap 3 折叠显示带有 V 形图标的状态 https stackoverflow com questions 18325779 bootstr
  • 从 Bool 到 Bool 有多少种不同的函数?

    由于这 至少在我看来 与编程密切相关 所以我在这里问而不是在math https math stackexchange com or cs https cs stackexchange com 但如果您认为它最适合那里或另一边 请发表您的意
  • 如何获得正则表达式的反函数?

    假设我有一个正则表达式 可以正确查找文本文件中的所有 URL http a zA Z0 9 如果我想要的不是 URL 而是相反的 除 URL 之外的所有其他文本 是否可以进行简单的修改来实现此目的 您可以简单地搜索并用空字符串替换与正则表达
  • mongoose 更新数组或添加到数组

    我已经尝试让它运行一段时间了 但我不知道我做错了什么 我有两个这样的模式 const paymentSchema new Schema year month type String required true status type Boo
  • 为什么SmartGWT没有分页网格?

    很想知道为什么SmartGWT没有分页网格 它是所有企业应用程序必须具备的功能 我找到了 Serendipity 示例 但它在最新版本中不起作用SmartGWT 我可以期待未来支持分页的网格吗 目前 SmartGWT 不支持分页网格 但有多
  • 如何在Flutter中使用TextFormField的按键事件?

    有什么办法可以捕获文本字段中的按键吗 就我而言 当用户在文本字段内按回车键时 这些值将被存储 为此 我需要像 Kotlin Android 中那样使用 Keypress event 我这周才开始尝试 flutter 因为它很有趣而且是跨平台
  • 在c中的Linux套接字编程中从侦听和接受的连接中提取IP

    在下面的代码中 我想在接受传入连接后提取已连接客户端的 IP 地址 之后我应该做什么accept 实现它吗 int sockfd newsockfd portno clilen portno 8090 clilen 0 pthread t
  • 使用 UrlHelper.Action 方法生成 url 时出现空引用异常

    由于某种原因 当某些机器人访问该网站时 会生成一个带有UrlHelper Action方法引发空异常System Web HttpServerVarsCollection Get 我已经做了一些调试 调用堆栈开始尝试从以下位置获取 HTTP