1

次のコードは、私がしたいことを行います。文字列パラメータForSaleOrRentの値がForSaleまたはForRentの場合、アクションメソッドはHttpNotFoundResultを返します。私の質問は、この属性はRoute属性だけを使用してですか?経路属性を使用して経路パラメータの特定の値のみを受け入れることは可能ですか?

[Route("post/{ForSaleOrRent}")] 
public ActionResult PostProperty(string ForSaleOrRent) 
{ 
    bool IsValidUrl = ForSaleOrRent.ToUpper() == "FORSALE" || 
         ForSaleOrRent.ToUpper() == "FORRENT"; 
    if (!IsValidUrl) 
    { 
     return new HttpNotFoundResult(); 
    } 
    return View(ForSaleOrRent); 
} 
+0

は、2つの異なる機能マッピング特定を使用していないだろうあなたの問題を解決するには? – Phil1970

+0

@ Phil1970上記のコードも同様に動作しますが、これがroute属性を使用して実行できるかどうかを知りたいと思います。 –

+1

最初に 'enum'を使用してみませんか? – haim770

答えて

1

だけ

[Route("post/{ForSaleOrRent:regex(^forrent$|^forsale$)}")] 
public ActionResult PostProperty(string ForSaleOrRent) 
{ 
    return View(ForSaleOrRent); 
} 

参照インライン制約を使用する:

+0

それは私にForSaleOrRentの価値を与えるだろうか? –

+0

私はそれをテストしましたが、エラー " - 'DefaultInlineConstraintResolver'タイプのインライン制約リゾルバは、次のインライン制約: '値(forrent | forsale)'を解決できませんでした。 –

+1

私はそれについてはあまりよく分かりませんでした。それはポスト "属性ルーティング以前にこのようなカスタムインライン制約が提供された"と述べたが、それらがどのように変更されたかの指示を与えなかった。上記の2番目のリンクを見つけ、制約を修正しました。あるいは、2番目のリンクから 'ValuesConstraint'を使用することもできます(カスタムルート制約のセクションを参照してください)。 – NightOwl888

関連する問題