有什么方法可以调用 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
编辑: This is the code我曾经弄清楚该怎么做。显然,它需要完全信任,我不喜欢这种 hack,但是 ASP.NET 在创建我自己的需要依赖构建的处理程序工厂时并没有让我轻松地进行 IoC - 功能。
编辑 2:将完全限定的类型名称固定为 System.Web.Services.Protocols.WebServiceHandlerFactory
.修复了搜索 IHttpHandler
的程序集搜索这是在 System.Web
至 WebService
这是在 System.Web.Services
.如果您有任何问题,请告诉我。
编辑 3:对此感到抱歉。我遗漏了 SecurityCritical
他们使用的类,如果你愿意,你可以用另一种方式做,但我只是在做的时候直接从他们那里复制。它用于提升和断言权限,这就是您需要完全信任的原因。
代码
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();
}
}
}
关于c# - 获取 ScriptHandlerFactory 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865728/