2

カスタムルートハンドラーを作成しました。Webサイトに競合するコントローラー名のエリアがあるため、エラーが発生します。名前のコントローラーに一致する複数のタイプが見つかりました...

ハンドラーで名前空間を指定する必要があると思いますよね?

私は以下を試しましたが、どれもうまくいきません:

public class MyRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {

        (... complicated DB lookups and "re-writing" of requestContext.RouteData.Values["controller"] ...)

        // doesn't work
        requestContext.RouteData.Values["namespaces"] = new[] { "Site.Contollers" };

        // doesn't work
        requestContext.RouteData.DataTokens.Add("namespaces", new[] { "Site.Contollers" });

        // doesn't work
        requestContext.RouteData.Values["namespaces"] = "Site.Contollers";

        // doesn't work
        requestContext.RouteData.DataTokens.Add("namespaces", "Site.Contollers");

        (... snip ...)

        return base.GetHttpHandler(requestContext);
    }
}

正しい方法は何ですか?

注:ハンドラーはデータベースルックアップを実行し、結果に基づいてさまざまなコントローラーを選択するため、Global.asax.csファイルで基本的なMapRoute()メソッドを使用することはできません(私が知る限り)。

4

1 に答える 1

12

OMG、私はばかげています。

「コントローラー」のつづりを間違えました。正解は次のとおりです。

requestContext.RouteData.DataTokens.Add("namespaces", new string[] { "Site.Controllers" });
于 2011-12-12T16:17:07.363 に答える