簡體   English   中英

我可以在ASP.NET MVC站點中路由Web服務(ASMX)的URL嗎?

[英]Can I route a url for a web service (ASMX) in an ASP.NET MVC Site?

我已經看到了如何使用這樣的代碼將自定義路由添加到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的控制器屬性區分開來

這是我的方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM