カスタムhttpHandlersからのASPXページの評価

私はどこにでも援助を求め、私を悩ますようになっています。

私はツールとその関連情報を保存するInternal Tooling Websiteを作成しています。

私のビジョンはウェブアドレス(Http://website.local/Tool/ID) IDは、表示するツールのIDです。 私の推論は、私は様々な他の機能を可能にするためにURLの機能を拡張することができます。

現在私は、 'ツール'フォルダにある任意のURLをインターセプトするカスタムhttpHandlerを使用しています。

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Tooling_Website.Tool
{
    public class ToolHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return false; }
        }


        public void ProcessRequest(HttpContext context)
        {
            //The URL that would hit this handler is: http://{website}/Tool/{AN ID eg: http://{website}/Tool/PDINJ000500}
            //The idea is that what would be the page name is now the ID of the tool.
            //tool is an ASPX Page.
            tool tl = new tool();
            System.Web.UI.HtmlTextWriter htr = new System.Web.UI.HtmlTextWriter(context.Response.Output);
            tl.RenderControl(htr);
            htr.Close();
        }
    }
}

基本的に私は顧客のhttpHandlerにResponseへのレンダリングをさせるための 'Tool'フォルダ(Tool \ tool.aspx)の中にページを持っています。

しかし、この方法はうまくいきません(失敗しない、何も表示しない)私は生のファイルを応答に書き込むことができますが、私の目標ではないことは明らかです。

ありがとう、

オリバー

6
ASP.NET MVCの使用を検討しましたか?あなたがやろうとしていることに適しているようです。
追加された 著者 tvanfosson,
MVC2は.NET 3.5で動作します。 nerddinner.codeplex.com の例は標準的な例です。基本的には、特定のツールIDを使用するIndexアクションを備えた標準TooControllerが必要です。追加のアクションまたはパラメータ(またはその両方)を追加して機能を拡張できます。
追加された 著者 tvanfosson,
@OliverBakerは分かりやすいですが、あなたがそれを再開発する道を歩んでいるようです。
追加された 著者 tvanfosson,
別のオプションは、.net 4.0(およびwebformsルーティング)を使用できないので、IIS URL書き換え2.0です。 iis.net/download/urlrewrite
追加された 著者 ScottE,
.net 3.5のための必要性、良い例がありますか?
追加された 著者 Oliver Baker,
冷静に、私はそれを見ていきますが、当分の間、私はまだ追加のライブラリを必要としないソリューションにはまだオープンしています。
追加された 著者 Oliver Baker,

1 答え

カスタムアプローチを使いたい場合は、 IHttpHandler 派生クラスで次のことを実行できます:

        public void ProcessRequest(HttpContext context)
        {
            //NOTE: here you should implement your custom mapping
            string yourAspxFile = "~/Default.aspx";
            //Get compiled type by path
            Type type = BuildManager.GetCompiledType(yourAspxFile);
            //create instance of the page
            Page page = (Page) Activator.CreateInstance(type);
            //process request
            page.ProcessRequest(context);
        }
5
追加された