有没有办法调用 System.Web.Script.Services.ScriptHandlerFactory 类的 GetHandler 方法,该方法返回 IHttpHandler 类型对象。我知道 ScriptHandlerFactory 是一个内部类,但是我可以通过其他方式获取它吗?我这么说的原因是因为我想路由我的 .asmx 路径并且路由需要这种类型的代码:
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new WebServiceHandlerFactory().GetHandler(HttpContext.Current,
"*",
_VirtualPath,
HttpContext.Current.Server.MapPath(_VirtualPath));
}
}
上面使用了“WebServiceHandlerFactory”,但我只想使用 ScriptHandlerFactory,因为我也想使用 jquery ajax 调用。我将通过 jquery ajax 调用来调用 asmx 方法。你能帮我这样做吗?
借自Spring.Net。我用它来访问SimpleHttpHandler
因为我使用 IoC 来创建HttpHandler
s.
Edit: 这是代码 https://anonsvn.springframework.org/svn/spring-net/branches/nhibernate_configuration_schema/src/Spring/Spring.Web/Web/Support/AbstractHandlerFactory.cs我曾经想出如何去做。显然,它需要充分信任,而且我不喜欢这种 hack,但是 ASP.NET 并没有让我在创建自己的需要依赖内置功能的处理程序工厂时轻松执行 IoC。
Edit 2:将完全限定类型名称修复为System.Web.Services.Protocols.WebServiceHandlerFactory
。修复了搜索中的程序集搜索IHttpHandler
这是在System.Web
to WebService
这是在System.Web.Services
。如果您有任何问题,请告诉我。
Edit 3:为此事道歉。我遗漏了SecurityCritical
他们使用的类,如果你愿意,你可以用另一种方式来做,但我在做的时候直接从他们那里复制了。它用于提升和断言权限,这就是您需要的原因充分信任.
Code
static YourCodeHere()
{
PrivilegedCommand cmd = new PrivilegedCommand();
SecurityCritical.ExecutePrivileged(new PermissionSet(PermissionState.Unrestricted), new SecurityCritical.PrivilegedCallback(cmd.Execute));
handlerFactory = cmd.Result;
}
private class PrivilegedCommand
{
public IHttpHandlerFactory Result = null;
public void Execute()
{
Type handlerFactoryType = typeof(System.Web.Services.WebService).Assembly.GetType("System.Web.Services.Protocols.WebServiceHandlerFactory");
Result = (IHttpHandlerFactory)Activator.CreateInstance(handlerFactoryType, true);
}
}
/// <summary>
/// Utility class to be used from within this assembly for executing security critical code
/// NEVER EVER MAKE THIS PUBLIC!
/// </summary>
/// <author>Erich Eichinger</author>
internal class SecurityCritical
{
internal delegate void PrivilegedCallback();
[SecurityCritical, SecurityTreatAsSafe]
[MethodImpl(MethodImplOptions.NoInlining)]
internal static void ExecutePrivileged(IStackWalk permission, PrivilegedCallback callback)
{
permission.Assert();
try
{
callback();
}
finally
{
CodeAccessPermission.RevertAssert();
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)