3

Raportare2つのアクションを持つという名前のコントローラーがあります:ReportAReportB。どちらも、指定されたパラメータに基づいてExcelファイルを返します。

public ActionResult ReportA(int? month, int? year)
{
...
}
public ActionResult ReportB(int? month, int? year)
{
...
}

私のglobal.asaxには、このための次のルーティングルールがあります。

routes.MapRoute(
                "ReportA",
                "{Raportare}/{ReportA}/{month}/{year}",
                new { controller = "Raportare", action = "ReportA", month = UrlParameter.Optional, year = UrlParameter.Optional});

 routes.MapRoute(
                "ReportB",
                "{Raportare}/{ReportB}/{month}/{year}",
                new { controller = "Raportare", action = "ReportB", month = UrlParameter.Optional, year = UrlParameter.Optional }); 

ただし、mysite.com / Raportare / ReportB / 5/2012にアクセスすると、ReportAファイルが返されます。mysite.com/Raportare/ReportB?month=5&year=2012にアクセスすると、正常に機能します。おそらくルーティングルールで何か間違ったことをしているのですが、それを理解することはできません。

4

2 に答える 2

3

すべてのアクションにルートを追加する必要はありません。これらはテンプレートのように機能し、3番目のパラメーターは単なるデフォルト値です。

routes.MapRoute(
  "reports",
  "Raportare/{action}/{month}/{year}",
  new {
    controller = "Raportare",
    action = "ReportA",
    month = UrlParameter.Optional,
    year = UrlParameter.Optional
  }
);

これをGlobal.asax.csのデフォルトのルールの前に置きます。そうしないと、デフォルトが最初に一致する可能性があります。

次に、URLで指定されているためmysite.com/Raportare/ReportB/5/2012、アクションを呼び出します。ReportB

mysite.com/RaportareReportAこれはデフォルトのアクションであるため、を呼び出します。

于 2012-05-23T08:39:35.150 に答える
0

作成したルートは基本的に同じです。そのため、リクエスト文字列に一致する最初のものが成功し、最初のアクションが呼び出されます。

于 2012-05-23T08:50:52.373 に答える