2011-07-27 17 views
1

ルーティングサイトを持つASP.net 4.0で作業していますが、MVCアーキテクチャにはありません。 ここで大きな問題があります。つまり、ルーティングを通じてハンドラファイルを呼び出すことができません。asp.net 4.0での.ashxハンドラの呼び出し方法ルーティング

私はそれが

Type 'Captcha' does not inherit from 'System.Web.UI.Page'. 
すなわち、エラーがスローされます。このサイトで任意のハンドラファイルを呼び出していますが、私は

public static void RegisterRoutes(System.Web.Routing.RouteCollection routes) 
    { 
     routes.Add(new System.Web.Routing.Route("{language}/{*page}", new CustomRouteHandler())); 
    } 

    void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(System.Web.Routing.RouteTable.Routes); 
    } 

とCustomRouteHandlerクラスで

public class CustomRouteHandler : IRouteHandler 
    { 
     public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     string language = TemplateControlExtension.GetString(null, requestContext.RouteData.Values["language"]).ToLower(); 
     string page = TemplateControlExtension.GetString(null, requestContext.RouteData.Values["page"]).ToLower(); 

     if (string.IsNullOrEmpty(page)) 
     { 
      HttpContext.Current.Response.Redirect("/" + language + "/default.aspx"); 
     } 

     string VirtualPath = "~/" + page; 

     if (language != null) 
     { 
      TemplateControlExtension.Language = language; 
     } 

     return BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler; 
    } 
} 

Global.asaxのページにこのコードを書きます

私の質問は、このサイトのハンドラファイルをどのように呼び出すことができるのですか?

このルートコードはどのような変更が必要ですか?

+0

を使用し、それがページをcatpchaですか?あなたのルートがこのリクエストを受けており、適切な値を返していないようです –

答えて

2

このコード

using System.Web; 
using System.Web.Compilation; 
using System.Web.Routing; 

public class HttpHandlerRouteHandler<T> : IRouteHandler where T : IHttpHandler, new() { 

    public HttpHandlerRouteHandler() { } 

    public IHttpHandler GetHttpHandler(RequestContext requestContext) { 
    return new T(); 
    } 
} 

public class HttpHandlerRouteHandler : IRouteHandler { 

    private string _VirtualPath; 

    public HttpHandlerRouteHandler(string virtualPath) { 
    this._VirtualPath = virtualPath; 
    } 

    public IHttpHandler GetHttpHandler(RequestContext requestContext) { 
    return (IHttpHandler) BuildManager.CreateInstanceFromVirtualPath(this._VirtualPath, typeof(IHttpHandler)); 
    } 

} 
関連する問題