6

asp.net mvc プロジェクトで .aspx (webforms ページ) をルーティングしようとしています。このページを global.asax に登録します。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("Tickets", "Reports/Tickets", "~/WebForms/Reports/Tickets.aspx");
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

問題は、2行目を追加した後、サイトがホームコントローラー(インデックスアクション)への入力を停止し、http://localhost:37538/Reports/Tickets?action=Index&controller=Login%22常にプロジェクトを実行することにリダイレクトされることです。

プロジェクトの詳細:

  • Asp.Net MVC 3
  • フォーム認証
  • .Net 4.0

TicketsObs: このエラーを再現するには、フォルダー内に webforms ページを作成した後、インターネット アプリとして新しい asp.net mvc プロジェクトを作成し/WebForms/Reports、新しいルートを登録します。プロジェクトを実行します (おそらくログに記録されています)。ここでログオフすると、にリダイレクトされhttp://localhost:35874/Reports/Tickets?action=LogOff&controller=Accountます。なぜでしょうか?

4

1 に答える 1

12

解決しました!そのため、Web フォーム ルートにルート制約を追加して、発信ルートの生成ではなく着信ルートのみをキャッチするようにする必要があります。

次のクラスをプロジェクトに追加します (新しいファイルまたは global.asax.cs の下部)。

public class MyCustomConstraint : IRouteConstraint{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){
        return routeDirection == RouteDirection.IncomingRequest;
    }
}

次に、チケット ルートを次のように変更します。

routes.MapPageRoute(
    "Tickets",
    "Reports/Tickets",
    "~/WebForms/Reports/Tickets.aspx",
    true, null, 
    new RouteValueDictionary { { "outgoing", new MyCustomConstraint() } }
);
于 2012-04-16T17:31:56.523 に答える