1

さまざまなターゲットから来る可能性のあるリクエストの「キャッチオール」として機能するアプリケーションがあります。「accept」ヘッダーの値に基づいて、アプリケーション内の別のコントローラー/アクションにリダイレクトできるようにしたいと考えています。

明確化: 可能であれば、HTTP ハンドラーなしでこれを実行したいと考えています。

4

3 に答える 3

4

カスタムルートを書くことができます:

public class MyRoute : Route
{
    public MyRoute(string url, object defaults)
        : base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
    {

    }

    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        var rd = base.GetRouteData(httpContext);
        if (rd == null)
        {
            return null;
        }

        var accept = httpContext.Request.Headers["Accept"];
        if (string.Equals("xml", accept, StringComparison.OrdinalIgnoreCase))
        {
            rd.Values["action"] = "xml";
        }
        else if (string.Equals("json", accept, StringComparison.OrdinalIgnoreCase))
        {
            rd.Values["action"] = "json";
        }
        return rd;
    }
}

次に、このルートを登録します。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.Add(
        "Default", 
        new MyRoute(
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        )
    );
}

これで POST し、リクエスト ヘッダーをコントローラーのアクションに/home設定するとヒットします。AcceptxmlXmlHome

于 2012-04-11T06:39:22.313 に答える
0

Phil haack Route Magicプラグインを使用できます.HttpHandlerルーティングがありますが、HttpHandlerを使用しています.

ルートマジック

于 2012-04-10T23:37:13.700 に答える
0

ルートを作成します。単純なクラスを作成し、ここから派生させます。戻り値の型が uRouteBaseのメソッドが見つかります。GetRouteData(System.Web.HttpContextBase httpContext)RouteDatahttpcontext

于 2012-04-10T22:29:46.420 に答える