13

これが MVC Web サイトで発生していることが関連しているかどうかはわかりませんが、とにかく言及したいと思います。

私の web.config には、次の行があります。

<add verb="*" path="*.imu" type="Website.Handlers.ImageHandler, Website, Version=1.0.0.0, Culture=neutral" />

Website プロジェクトには、ImageHandler クラスを含む Handlers という名前のフォルダーがあります。こんな感じです(processrequestのコードは外してあります)

using System;
using System.Globalization;
using System.IO;
using System.Web;

namespace Website.Handlers
{
    public class ImageHandler : IHttpHandler
    {
        public virtual void ProcessRequest(HttpContext context)
        {
            //the code here never gets fired
        }

        public virtual bool IsReusable
        {
            get { return true; }
        }
    }
}

Web サイトを実行して /something.imu に移動すると、404 エラーが返されます。

Visual Studio 2008 を使用しており、これを ASP.Net 開発サーバーで実行しようとしています。

私は数時間探していて、別の空のウェブサイトで動作していました。そのため、既存の Web サイト内で機能しない理由がわかりません。*.imu パスへの他の参照はありません。

4

1 に答える 1

35

基本的にすべての着信要求を制御するため、これは MVC を使用しているという事実と関係があると思われます。

ルーティング テーブルを使用し、場合によっては新しいルーティング ハンドラを作成する必要があると思います。私はこれを自分で行ったことはありませんが、次のようなことがうまくいくかもしれません:

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

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add(new Route
    (
         "{action}.imu"
         , new ImageRouteHandler()
    ));
}

その後、ImageRouteHandlerクラスはカスタムを返しますが、ウェブ上の例を見ると、それを変更してそのままではなくImageHttpHandler実装する方が良いかもしれません。MvcHandlerIHttpHandler

編集 1:ピーターのコメントによると、次のIgnoreRouteメソッドを使用して拡張子を無視することもできます。

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.imu/{*pathInfo}");
}
于 2009-05-14T14:15:19.560 に答える