0

Web フォームがすべて共通の基本ページから継承する ASP.net Web サイトがある場合 (認証などをチェックし、セッションの有効期限が切れたときにリダイレクトするなど)、ashx ハンドラーでこの基本クラスを使用する方法はありますか? ? ハンドラーで基本ページ クラスを継承することから始めましたが、これは推奨される方法ではない可能性があることに気付きました。ここでコードの重複を避ける方法について何か考えはありますか?

これはできますか

public class FooHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {

これになる

public class FooHandler : BasePageClass, IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {

次の警告が表示されます。これにより、自分が行っていたことを再考することができました。

FooHandler.ProcessRequest(System.Web.HttpContext) は、継承されたメンバー System.Web.UI.Page.ProcessRequest(System.Web.HttpContext) を非表示にします。その実装をオーバーライドするには、override キーワードを追加します。それ以外の場合は、新しいキーワードを追加してください。

4

2 に答える 2

4

親クラス ProcessRequest を仮想として設定すると、子クラスでそれをオーバーライドし、オーバーライドされたメソッド内から基本クラス メソッドを呼び出すことができます。

public abstract class ParentHandler : IHttpHandler, IRequiresSessionState
{
    protected WebConnectHandler Context;

    public virtual void ProcessRequest(HttpContext context)
    {
        Context = new WebConnectHandler(context);
    }

    //...
}

//...
public class ChildHandler : ParentHandler
{
    public override void ProcessRequest(HttpContext context)
    {
        base.ProcessRequest(context);
        //the rest of your code
    }
}
//...
于 2014-01-30T08:06:52.690 に答える
1

オブジェクト指向の第一人者タイプが常に継承よりも構成に投票する理由を発見しています。とにかく、あなたがやりたいことを正確に行うのはかなり難しいです.System.Web.UI.PageはIHttpHandlerを実装していますが(私が正しく思い出せば)、独自のハンドラーに戻るために無効にできない内部処理がたくさんあります.

最も簡単な解決策は、これらの関数をできるだけ多くモンスター ベース ページ クラスから独自のクラスに移動することです。できれば、セッションの有効期限などを処理するのが理にかなっている IHttpModules に移動して、物事を分離することをお勧めします。

于 2010-10-06T17:57:04.947 に答える