我已经看到了如何使用这样的代码向WebForms添加自定义路由.
public class WebFormsRouteHandler : IRouteHandler
{
public string VirtualPath { get; set; }
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
// Compiles ASPX (if needed) and instantiates the web form
return (IHttpHandler) BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof (IHttpHandler));
}
}
我试图让类似的东西工作但是对于Web服务文件(TestService.asmx.)之前的方法抛出异常,因为页面不从IHttpHandler继承.我见过其他一些使用WebServiceHandlerFactory的代码
return new WebServiceHandlerFactory().GetHandler(context, requestType, url, pathTranslated);
这会返回一个像我需要的IHttpHandler但它需要传入一个HttpContext,但我作为RequestContext的一部分访问的唯一东西是HttpContextBase.据我所知,我无法从中转换为HttpContext.
有任何想法吗?或者可能采取不同的方式去做吧?我想要完成的是通过正常的路由系统控制我的Web服务的URL.一个例子是希望TestService.asmx成为ExampleTestService /.
最佳答案 有趣的想法.我不知道你可以这样使用网络表单.我们目前正在将旧的Web表单应用程序与IgnoreRoutes集成.我肯定会给你的问题加书签;)
但也许我可以帮助你解决问题.好的旧HttpContext仍然存在,它只是被MVC包装到模拟友好的HttpContextBase中.
您可以使用检索原始HttpContext
var context = System.Web.HttpContext.Current;
在控制器中,您必须完全指定类型以将其与名为HttpContext的控制器属性区分开来