我有一个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?