次のシグネチャを持つコントローラーがあります。
[Route("products/filter/{apc=apc}/{xpc=xpc}/{sku=sku}")]
public IHttpActionResult Get(string apc, string xpc, int? sku)
{ ... }
次のURIでこのメソッドを呼び出します。
最初のURIは問題なく機能します。 2番目のものには、奇妙な副作用があります。 apcおよびxpcのデフォルト値は指定されていない場合はnullである必要がありますが、パラメーターは実際にはその名前です。追加のロジックを追加することでこれを克服できます。
apc = (apc == "apc") ? null : apc;
xpc = (xpc == "xpc") ? null : xpc;
これはハックのように見え、渡された値がパラメーター名と等しい場合に問題になります。
この副作用なしでルートを定義する方法はありますか?
私はそれを考え出した。クエリ文字列をメソッドパラメータにマップする方法の過去に見つけた悪い例を使用していました。
他の誰かがそれを必要とする場合、クエリ文字列に次のようなオプションのパラメータを含めるために:
あなたが使用します:
[Route("products/filter/{apc?}/{xpc?}/{sku?}")]
public IHttpActionResult Get(string apc = null, string xpc = null, int? sku = null)
{ ... }
これらの型に既にデフォルトがある場合、メソッドパラメータのデフォルト値を定義する必要があるのは奇妙に思えます。
Skuはintであり、文字列「sku」にデフォルト設定することはできません。 オプションのURIパラメーターとデフォルト値 を確認してください