7

私のWebサイトには、すべてのファイルダウンロード要求を処理するハンドラー(FileDownload.ashx)があります。

最近、自分のサイトをASP.NET 4.0に移行しましたが、現在はルーティングが広範囲に使用されています。ページリクエスト(aspx)を処理するときはすべて正常に機能しますが、ハンドラーでは機能しません-次のエラーが発生します:

タイプ「.Handlers.FileDownload」は「System.Web.UI.Page」から継承されません。

ルーティングはページにのみ実装されるため、これは理にかなっています。

ルーティングと.ashxを一緒に使用できるようにするには、どのような手順を実行する必要がありますか?RouteData.Valuesルートから抽出できるようにしたい。

public class FileDownload : IHttpHandler
{
}
4

2 に答える 2

4

最終的にハンドラーを手作りする必要がありましたが、それは十分に簡単でした:http: //haacked.com/archive/2009/11/04/routehandler-for-http-handlers.aspx

.Net 4.0は、IHttpHandlerのルート処理をネイティブにサポートしていません。

于 2010-06-30T13:16:37.630 に答える
1

IISの問題のように聞こえます。

ASP.NET開発サーバー(Cassini)を使用しようとすると、これは機能しますか?

IIS6を使用している場合は、ワイルドカードアプリケーションマッピングを使用する必要があります。ここを参照してください。

また、次のように、ASPXページに従ってルートを作成する必要もあります。

public static void RegisterRoutes(RouteCollection routes)
{
    string[] allowedMethods = { "GET", "POST" };
    HttpMethodConstraint methodConstraints = new HttpMethodConstraint(allowedMethods);

    Route fileDownloadRoute = new Route("{foo}/{bar}", new FileDownload());
    fileDownloadRoute.Constraints = new RouteValueDictionary { { "httpMethod", methodConstraints } };

    routes.Add(fileDownloadRoute);
}

あなたはそれをしましたか?もしそうなら、あなたの問題は間違いなくIISにあると思います。

IIS6とIIS7の両方のASP.NET4ルーティングに関する優れた記事については、こちらを参照してください。

幸運を!

于 2010-06-29T21:29:42.637 に答える