5

このようなコードを使用してカスタム ルートを Web フォームに追加する方法を見てきました。

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/ として表示する場合です。

4

2 に答える 2

1

これが私のやり方です:

 Return New WebServiceHandlerFactory().GetHandler(HttpContext.Current, "*", "/Build/WebService.asmx", HttpContext.Current.Server.MapPath(aspxToLoad))
于 2011-09-28T11:34:49.983 に答える
1

興味深いアイデアです。Web フォームをそのように使用できるとは知りませんでした。現在、古い Web フォーム アプリを に統合していますIgnoreRoutes。私は間違いなくあなたの質問をブックマークします;)

でも、あなたの問題を解決できるかもしれません。古き良きものHttpContextがまだ存在し、MVC によってモックフレンドリーにラップされているだけHttpContextBaseです。

HttpContextでオリジナルを取得できます

var context = System.Web.HttpContext.Current;

コントローラーでは、型を完全に指定して、呼び出されたコントローラー プロパティと区別する必要があります。HttpContext

于 2009-06-20T12:53:22.783 に答える