【问题标题】:ASP.NET - Resolve Loaded HttpHandler PathASP.NET - 解析加载的 HttpHandler 路径
【发布时间】:2010-11-23 22:13:48
【问题描述】:

在 ASP.NET 中,有没有办法以编程方式解析加载的 HttpHandler 的路径,因为它在 Web.config 中定义? (即 SomeModule.axd)?

【问题讨论】:

    标签: asp.net configuration web-config httphandler


    【解决方案1】:

    如果您对处理当前请求的处理程序的路径感兴趣:

    string path = HttpContext.Current.Handler.GetType().Assembly.CodeBase;
    

    如果您碰巧知道在哪里可以找到其他处理程序实例的集合,您也可以使用相同的方法来获取它们的路径。

    【讨论】:

    • 我实际上是在尝试解析处理程序的“虚拟路径”,而不是 DLL 本身的位置。 IE。如果“MyHandler”类型注册在“MyHandler.axd”,我想解析“MyHandler.axd”。
    【解决方案2】:

    如果我正确理解了这个问题,你想从 web.config 中获取路径吗?

    如果是这样,您可能正在寻找的是这样的:

    string p = null;
    System.Web.Configuration.HttpHandlersSection httpHandlersSection =
        (System.Web.Configuration.HttpHandlersSection)
            System.Configuration.ConfigurationManager.GetSection("system.web/httpHandlers");
    
    foreach (System.Web.Configuration.HttpHandlerAction handler in httpHandlersSection.Handlers)
    {
        if(handler.Type == "myType")
        {
            p = handler.Path;
            break;
        }
    }
    

    这里的技巧是 if 语句。 web.config 中的处理程序没有可用作键的友好“名称”。它们只有类型(可能是丑陋的字符串)、路径和动词。要找到您感兴趣的特定处理程序,您可能必须在处理程序的类型或路径中搜索用于标识您有兴趣查找的特定处理程序的已知子字符串。

    【讨论】:

    • 这是一个相当不错的解决方案,尽管是间接的(按 .NET 标准)。如果有某种框架标准服务定位器可以映射到 HttpHandlers 以便从单独的模块进行接口,那将是非常好的。我会说一些值得考虑的事情!
    • 一般来说,用户代码需要在该级别检查应用程序配置的内部结构是不寻常的。此外,还有一些内置的处理程序和其他通过机器级配置注册的处理程序。然后是 HttpHandlerFactories 可以按需动态注册处理程序。在处理程序的动态特性和潜在的安全考虑之间,我可以看到为什么没有太多直接访问这些对象的方式。
    • 对于那些和我一样头疼的人,请记住,“system.web/httpHandlers”是区分大小写的。这意味着 Handlers 中的“H”是国会大厦。
    【解决方案3】:

    从当前的 http 上下文中使用 Request 对象的 path 属性

    【讨论】:

      猜你喜欢
      • 2010-11-14
      • 1970-01-01
      • 2018-12-27
      • 2012-11-28
      • 2012-09-07
      • 2011-04-11
      • 1970-01-01
      • 2015-11-25
      • 2013-06-30
      相关资源
      最近更新 更多