ASP.NET MVCルーティング - ASPXにリダイレクトしますか?
-
23-09-2019 - |
質問
これは簡単なはずのようですが、何らかの理由で運がありません。既存のWebFormsアプリをMVCに移行しているため、サイトのルートを既存のASPXページを指していることを保ち、名前付きルートにのみルーティングを適用する必要があります。これが私が持っているものです:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
RouteTable.Routes.Add(
"Root",
new Route("", new DefaultRouteHandler())
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Calendar2", action = "Index", id = "" } // Parameter defaults
);
}
したがって、ASPXページは無視する必要があり、デフォルトのルートURLはこのハンドラーによって処理される必要があります。
public class DefaultRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(
"~/Dashboard/default.aspx", typeof(Page)) as IHttpHandler;
}
}
これはうまくいくようですが、結果のYPODはこれを与えてくれます。
同じID「__ページ」を持つ複数のコントロールが見つかりました。トレースでは、コントロールに一意のIDがあることが必要です。
これは、ページが何らかの形で2回レンダリングされていることを暗示しているようです。ダッシュボードページにURLを直接入力するだけで正常に動作します(ルーティングなし、エラーなし)。ハンドラーコードが別の方法で何かをする理由はわかりません。
結論 - ルートURLパスを選択したASPXにリダイレクトするだけです - 誰もが光を当てることができますか?
解決 2
うーん。そのため、私のブラウザは無関係な理由でクラッシュしましたが、これを再起動したので、上記のコードは予想通りに完全に機能しているようです。私は、ブラウザの再起動のためにサーバー側のコードがどのように異なる動作をするかについて完全に混乱しています(どういうわけか、何かが間違っていると思います)が、これは今では問題ではないようです。
編集: :まあ、これは実際にはまだ問題です - なぜそれが以前に機能したのかはわかりませんが、それは少しランダムです。一番下の行は、MVCが完全に有効なマークアップを生成する状況によっては、trace.axdパーサーでうまく機能しないように見えるということです。私は本当に良い説明を持っていませんが、Web.configでのトレースを無効にしてエラーをバイパスします。私の目的のために今のところそれは十分ですが、他の誰かからより良い説明を聞きたいです...
他のヒント
私はあなたの問題を本当に理解していません、私は十分に熟練していないかもしれません。とにかくやってみます...;)
ルートパスからリダイレクトする場合は、IISのデフォルトドキュメントを使用して、たとえばindex.aspxに入れてから、このページにresponse.redirectをリダイレクトするページに追加してみませんか?