2

使用しなければならないサードパーティのウィジェット ライブラリを入手しました。このライブラリには、ファイルにハードコードされた文字列があります。このリクエストをルートで傍受することは可能ですか? 私の試みは次のようになりました:

routes.MapRoute(name: "ribbonbar",
                url: "Content/Ribbon/Scripts/Ribbon.Tabs.foo",
                defaults: new { controller = "Ribbon", action = "Index" });

しかし、404しか出ませんでした。それは不可能ですか、それとも何かを混同しているのでしょうか?

4

1 に答える 1

5

はい、可能です。この要求がマネージド パイプラインとルートを確実に通過するようにするには、次のハンドラーを web.config に追加する必要があります。

<system.webServer>
    <handlers>
        ...
        <add 
            name="MyCustomhandler" 
            path="Content/Ribbon/Scripts/Ribbon.Tabs.foo" 
            verb="GET" 
            type="System.Web.Handlers.TransferRequestHandler" 
            preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

次に、このリクエストを処理する次のコントローラー アクションを使用できます。

public class RibbonController
{
    // GET Content/Ribbon/Scripts/Ribbon.Tabs.foo
    public ActionResult Index()
    {
        var file = Server.MapPath("~/App_Data/foo.bar");
        return File(file, "application/foo-bar");
    }
}

Content/Ribbon/Scripts/*同じコントローラ アクションからのすべてのリクエストを処理することもできます。

<system.webServer>
    <handlers>
        ...
        <add 
            name="MyCustomhandler" 
            path="Content/Ribbon/Scripts/*" 
            verb="GET" 
            type="System.Web.Handlers.TransferRequestHandler" 
            preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

そしてそのようなルート:

routes.MapRoute(
    name: "ribbonbar",
    url: "Content/Ribbon/Scripts/{name}",
    defaults: new { controller = "Ribbon", action = "Index" }
);

そのようなアクションで:

public class RibbonController
{
    // GET Content/Ribbon/Scripts/*
    public ActionResult Index(string name)
    {
        ...
    }
}

特定のハンドラーを使用する代わりに、次のようにすべての要求に対してマネージド モジュールを有効にすることもできます。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    ...
</system.webServer>

ただし、このオプションを有効にすることはお勧めしません。これは、アプリケーションのパフォーマンスに悪影響を及ぼす可能性がある静的リソースからのリクエストであっても、すべてのリクエストがマネージド パイプラインを通過するためです。選択した URL に対してのみ、これを選択的に有効にすることをお勧めします。

于 2013-03-31T17:09:49.307 に答える