在WebAPI中使用HttpContext.Current.Handler。从ASP.Net PageMethods迁移到WebAPI

时间:2017-03-20 07:07:33

标签: asp.net-web-api webforms asp.net-mvc-routing httpcontext

我有一个ASP.Net WebForms应用程序,它使用ASP.Net AJAX PageMethods来呈现一些用户控件。我试图使用WebAPI控制器和Ajax摆脱该实现。

但是在尝试访问HttpContext.Current.Handler时我遇到了问题。在当前实现中,我使用HttpContext.Current.Handler为每个TAB设置ID,如下所示(呈现UserCrl):

        var pageHolder = new AjaxBasePage();
        var viewControl = (UserControl)pageHolder.LoadControl(path);
        if (viewControl is IRenderable<D>)
        {
            if (dataToBind != null)
            {
                ((IRenderable<D>)viewControl).PopulateData(dataToBind, context);
            }
        }
        pageHolder.Controls.Add(viewControl);

        try
        {
            // Get tabID
            var page = (Page)HttpContext.Current.CurrentHandler;

            var pageID = page.GetTabID();
            pageHolder.Items.Add("TabID", pageID);

        }
        catch (Exception e)
        {
        }

为了在我当前的解决方案中设置我的WebAPI环境,我按如下方式设置了global.asax.cs:

protected void Application_Start(object sender, EventArgs e)
    {         
        GlobalConfiguration.Configure(Register);

        var route = RouteTable.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}/{tabID}",
        defaults: new { tabID = System.Web.Http.RouteParameter.Optional }
        );
        route.RouteHandler = new MyHttpControllerRouteHandler();
    }
    //To use Attribute Routing
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

    }

并且能够继续使用Session:

  public class MyHttpControllerHandler : HttpControllerHandler, IRequiresSessionState
    {
        public MyHttpControllerHandler(RouteData routeData) : base(routeData)
        {
        }
    }
    public class MyHttpControllerRouteHandler : HttpControllerRouteHandler
    {
        protected override IHttpHandler GetHttpHandler(RequestContext    requestContext)
        {
            return new MyHttpControllerHandler(requestContext.RouteData);
        }
    }

这种方法的问题在于,当尝试使用HttpContext.Current.CurrentHandler时,它会触发一个错误,说明&#34;无法转换类型&#39; System.Web.Http.WebHost.HttpControllerHandler&#39的对象;输入&#39; System.Web.UI.Page&#39;。&#34;

我不知道如何使它成功,任何想法我做错了什么以及如何设置WebAPI以使用HttpContext.Current.CurrentHandler?

0 个答案:

没有答案