0

2つのルートを作成しました

        config.Routes.MapHttpRoute(
            "1", "int/{controller}/{Id}",
            new { action = "GetById" });

        config.Routes.MapHttpRoute(
            "The rest", "int/{controller}/{action}",
            defaults: new { action = "Get" });

次に、コントローラーを作成できると考えています

    [HttpGet]
    public string Text(string text = null)
    {
    }

で呼び出しますが/int/sandpit2/text?text=xxx、「'GetById' という名前に一致するコントローラー 'Sandpit2' でアクションが見つかりませんでした」という 404 が返されます。

どうにかして最初のルールを呼び出すことができますが、メソッドGetByIdがない場合は、GetById他のルートを取得する代わりに一致させようとし404sますか?

4

1 に答える 1

0

問題は、ルーティングが 3 つの別々のフェーズで発生することです。

  • 一致するルートの検索
  • ルートに基づいて一致するコントローラーを見つける
  • 一致したコントローラー内で一致するアクションを見つける

したがって、あなたの場合、最初のルートは URL に適合し、コントローラーに到達します。次に、一致するパラメーターがId見つからないため、一致するアクションが見つからないと言います。これを次のように変更すると、次のように動作するはずです。

[HttpGet]
public string Text(string id = null)
{
   ...
}
于 2013-09-03T10:14:56.420 に答える