c# – 我可以在ASP.NET MVC站点中为Web服务(ASMX)路由URL吗?

我已经看到了如何使用这样的代码向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的控制器属性区分开来

点赞