3

私の ASP MVC Web アプリケーションでは、コントローラーに次のような「name」パラメーターを使用したアクションがよくあります。

Function Consult(name As String) As ActionResult

    .....

    Return View()
End Function

これらのアクションを、「id」パラメーターを使用して参照するのと同じ方法で参照できるようにしたいと考えています: ../Book/Consult/MyBookName

しかし、デフォルトルートが「id」パラメーターで引き続き機能することを望みます。つまり、デフォルト ルートが "id" または "name" のいずれかをパラメーター名として受け入れるようにしたいと考えています。

したがって、このようにルートを構成しようとしましたが、すべてのリクエストが最初のルートを使用し、2 番目のルートを使用しないように見えるため、機能しません。「id」パラメーターを使用したアクションは機能しなくなりました。

     routes.MapRoute( _
        name:="Name", _
        url:="{controller}/{action}/{name}", _
        defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
    )

    //Default Route
    routes.MapRoute( _
        name:="Default", _
        url:="{controller}/{action}/{id}", _
        defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
    )

私のコード例は VB ですが、C# でも回答を受け付けます :) どうもありがとうございました。

編集:明確にするために、パラメーターの名前を「id」に変更するだけで、ルート構成のデフォルトルートだけですべてが正常に機能します。しかし、これらの特定のケースではよりクリーンであるため、「名前」を保持したいと思います..

4

2 に答える 2

4

ルート制約を使用してみてください。

http://msdn.microsoft.com/en-us/library/cc668201(v=vs.100).aspx#adding_constraints_to_routes

routes.MapRoute(
    "Name",
    "{controller}/{action}/{name}",
    new { controller = "Home", action = "Index", id = "" },
    new RouteValueDictionary 
        {{"name", "[a-zA-Z]*"}}
);

これにより、ルートが文字のみを含む名前に制限されます。名前に数字を含めることができる場合は、それに応じて正規表現を調整してください。

于 2013-05-16T15:34:40.147 に答える