さまざまなターゲットから来る可能性のあるリクエストの「キャッチオール」として機能するアプリケーションがあります。「accept」ヘッダーの値に基づいて、アプリケーション内の別のコントローラー/アクションにリダイレクトできるようにしたいと考えています。
明確化: 可能であれば、HTTP ハンドラーなしでこれを実行したいと考えています。
さまざまなターゲットから来る可能性のあるリクエストの「キャッチオール」として機能するアプリケーションがあります。「accept」ヘッダーの値に基づいて、アプリケーション内の別のコントローラー/アクションにリダイレクトできるようにしたいと考えています。
明確化: 可能であれば、HTTP ハンドラーなしでこれを実行したいと考えています。
カスタムルートを書くことができます:
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
設定するとヒットします。Accept
xml
Xml
Home
Phil haack Route Magicプラグインを使用できます.HttpHandlerルーティングがありますが、HttpHandlerを使用しています.
ルートを作成します。単純なクラスを作成し、ここから派生させます。戻り値の型が
uRouteBase
のメソッドが見つかります。GetRouteData(System.Web.HttpContextBase httpContext)
RouteData
httpcontext