【问题标题】:Can I route a url for a web service (ASMX) in an ASP.NET MVC Site?我可以在 ASP.NET MVC 站点中路由 Web 服务 (ASMX) 的 url 吗?
【发布时间】:2010-11-04 11:41:10
【问题描述】:

我已经看到了如何使用类似这样的代码向 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/ 出现。

【问题讨论】:

    标签: c# .net asp.net-mvc httphandler


    【解决方案1】:

    有趣的想法。我不知道你可以那样使用网络表单。我们目前正在将旧的 Web 表单应用程序与 IgnoreRoutes 集成。我一定会为你的问题添加书签;)

    但也许我可以帮助您解决问题。旧的 HttpContext 仍然存在,它只是被 MVC 包装到模拟友好的 HttpContextBase 中。

    您可以使用

    检索原始HttpContext
    var context = System.Web.HttpContext.Current;
    

    在控制器中,您必须完全指定类型以将其与名为 HttpContext 的控制器属性区分开来

    【讨论】:

    • 我在这方面取得了部分成功。我可以获取自定义 url 来启动 Web 服务,但尝试调用它时失败。
    • 那么你最好的机会是通过 ASP.NET 代码调试到如果失败并找出原因......
    【解决方案2】:

    这就是我的做法:

     Return New WebServiceHandlerFactory().GetHandler(HttpContext.Current, "*", "/Build/WebService.asmx", HttpContext.Current.Server.MapPath(aspxToLoad))
    

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多