c# - 获取 ScriptHandlerFactory 处理程序

标签 c# jquery asp.net web-services routes

有什么方法可以调用 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.WebWebService这是在 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/

相关文章:

c# - 如何使用 .NET API 在 Google Drive 中创建文件夹?

c# - 如何使用 XmlSerializer 将异构子节点反序列化为一个集合?

javascript - 如何在jquery中将一个span标签附加到另一个span标签中?

php - 通过ajax在单选按钮上显示div中的数据点击

c# - 获取委托(delegate)的所有 Target 实例

c# - DbMigrator - 详细的代码优先迁移

javascript - fancybox 关闭后删除加载的元素

c# - 数据不存在时隐藏 Gridview

c# - 如何在运行时从代码隐藏更改 CSS 键的值?

javascript - 是否可以一次动态添加 2 行?