ASP.NET MVCとASP .NET Webフォームは、その中で同じルーティングインフラストラクチャを共有する両方のフレームワークは、最終的にHTTPリクエストを処理するためにIHttpHandler
を考え出す必要があります。
IHttpHandlerインターフェイスが 初めからASP.NETの一部となっており、 Webフォーム(System.Web.UI.Page)はIHttpHandlerです。要求のさらなる処理のため
(質問にリンクMSDNの記事から)ASP.NET MVCで
System.Web.Mvc.MvcHandler
クラスが使用され、which then delegates to a controller。 ASP.NET Webフォームでは通常、.aspxファイルを表すSystem.Web.UI.Page
クラスが使用されますが、純粋なIHttpHandler
.ashxファイルに関連付けられたものも使用できます。
.aspx Webフォームページの代わりに.ashxハンドラにルーティングすることができます。どちらもIHttpHandler
(MvcHandler
と同じ)を実装していますが、前者はそれだけです。これは、(ルーテッド)リクエストを処理する「純粋なクラス」に近づけることができます。ハンドラ部分は単なるインタフェースなので、自分のクラスから自由に継承することができます。
<%@ WebHandler Language="C#" Class="LightweightHandler" %>
using System.Web;
public class LightweightHandler : YourBaseClass, IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Hello world!");
}
public bool IsReusable { get { return false; } }
}
IRouteHandler
がちょうどIHttpHandler
のインスタンスを返す必要があることに注意してください:
public IHttpHandler GetHttpHandler(RequestContext requestContext);
あなたは.ashxファイルを使用する場合は、* BuildManagerを使用して、あなたのハンドラをインスタンス化するために、いくつかのフープを介してジャンプする必要があるかもしれません。そうでない場合、あなたはあなたのクラスのちょうど新しいインスタンスをすることができますし、それを返す:
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
// In case of an .ashx file, otherwise just new up an instance of a class here
IHttpHandler handler =
BuildManager.CreateInstanceFromVirtualPath(path, typeof(IHttpHandler)) as IHttpHandler;
// Cast to your base class in order to make it work for you
YourBaseClass instance = handler as YourBaseClass;
instance.Setting = 42;
instance.DoWork();
// But return it as an IHttpHandler still, as it needs to do ProcessRequest
return handler;
}
は純粋IHttpHandlersのルーティングはるかに詳細な分析のために、この質問への回答を参照してください:Can ASP.NET Routing be used to create “clean” URLs for .ashx (IHttpHander) handlers?
** I BuildManagerの例について完全には分からない人は、その部分が間違っていると私を修正してください。*
クラスには? App_Code/YourClass.csと同じですか? – justinlabenne
いいえMVC Controllerルーティングのようにしたいと考えています。コントローラーの例製品はhttp://domain.com/productを通じてアクセスする純粋なクラスです – user310291
純粋なクラスとは何ですか?コントローラはSystem.Web.Mvc.Controllerを継承し、WebフォームはSystem.Web.UI.Pageを継承します。どちらもクラスで、最初のものは純粋なものにし、2番目のものはそうではないものにします。 –