0

私は属性ルーティングを使用していますが、優れていると思います。特に、多くの異なる文化で自分のルートをローカライズできるという事実.

不規則に発生する問題に遭遇しました。それは時々発生し、他では発生せず、パターンを見つけることができません。

私が持っているアクションメソッドは次のとおりです。

 [GET("/")]
    [GET("{productId:int}")]
    [GET("{category2Id:int},{productId:int}/{category2Slug}/{productSlug}")]
    [GET("{category2Id:int},{category3Id:int},{productId:int}/{category2Slug}/{category3Slug}/{productSlug}")]
    [GET("{category2Id:int},{category3Id:int},{category4Id:int},{productId:int}/{category2Slug}/{category3Slug}/{category4Slug}/{productSlug}")]
    public virtual ActionResult Index(int productId, string productSlug = null, string category2Slug = null, string category3Slug = null, string category4Slug = null, int? category2Id = null, int? category4Id = null, int? category4Id= null)

私のコントローラーには次の装飾が施されています

[SessionState(SessionStateBehavior.Disabled)]
[RoutePrefix("product", TranslationKey = "product")]
public partial class ProductController

そして問題は、属性のレンダリングが正しいURLを生成することがあることです。 https://localhost/product/22,33,999/cat2/cat3/product-nameしかし、ほとんどの場合、以下が生成されます:https://localhost/product/999/?productSlug=product-name&category2Slug=cat2&category3Slug=cat3&category2Id=22&category3Id=33

なぜこれが発生しているのか、そしてコントローラーのアクションパラメーターがURLの一部ではなくクエリ文字列パラメーターとして追加されているという考えはありますか?

私は、属性ルーティングのバージョンが 3.4.2.0 の C# で開発された mvc4 アプリケーションに取り組んでいます。

何か案は?

4

1 に答える 1

0

ルートを正しく注文する必要があります。あなたがそれを持っているので、5つのルートのどれが最初に来るかという保証はありません。あなたはroutes.axdを訪問することによって確認することができます。

URLを盗聴すると、ルート"{productId}"が最初に一致するため、すべてのルートパラメータがクエリ文字列値として追加されます。これを修正するには、次のようにします。

[GET("product/{a}/{b}/{c}/{d}", ActionPrecedence = 1)]
[GET("product/{a}/{b}/{c}", ActionPrecedence = 2)]
[GET("product/{a}/{b}", ActionPrecedence = 3)]
[GET("product/{a}", ActionPrecedence = 4)]
[GET("product", ActionPrecedence = 5)]

これは、ルートを最も具体的なものから最も具体的でないものの順に並べることにより、URLの生成に役立ちます。a、b、c、およびdを指定すると、最初のルートがURL生成に使用されます。a、b、cのみの場合は、2番目が使用されます。

于 2013-02-18T17:38:39.197 に答える