2009-08-29 61 views

回答

4

的path属性如果我理解正确的问题,你希望获取从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中的处理程序没有可用作密钥的友好“名称”。他们所有的都是类型(可以是丑陋的字符串),路径和动词。要找到您感兴趣的特定处理程序,您可能必须在处理程序的类型或路径中搜索已知的子字符串,以识别您感兴趣找到的特定处理程序。

+0

这是一个相当不错的解决方案,虽然间接(由.NET标准)。如果有某种框架标准服务定位器可以映射到HttpHandler以便从单独的模块轻松连接,那将会非常好。值得考虑的事情我会说! – 2009-10-07 06:42:32

+1

一般来说,用户代码有必要检查该级别的应用程序配置的内部情况。另外还有内置的处理程序和其他通过机器级配置注册的处理程序。然后有HttpHandlerFactories按需动态注册处理程序。在处理程序的动态性质和潜在的安全性考虑之间,我可以看出为什么直接访问这些对象的方式并不多。 – 2009-10-07 16:26:42

+1

对于那些和我一样头痛的人,请记住,“system.web/httpHandlers”区分大小写。这意味着Handlers中的“H”是国会大厦。 – 2010-08-03 02:01:53

0

从当前的HTTP上下文中使用Request对象

0

如果你有兴趣的路径处理程序处理当前请求:

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

如果你碰巧知道在哪里可以找到其它的处理器实例的集合,你可以用同样的方法来也得到他们的路径。

+0

我实际上试图解决处理程序的“虚拟路径”,而不是DLL本身的位置。即如果“MyHandler”类型在“MyHandler.axd”注册,我想解析“MyHandler.axd”。 – 2009-10-13 16:24:28