サービスコントローラーとしてインターフェイスを実装しようとしています。私はこのインターフェースを維持していないので、変更することはできません。私のコントローラの場合次の文字列入力がオプションではない場合、オプションの文字列入力?
public interface IFoo
{
string Bar(string A, int B);
}
、のは、それは次のようになりましょう:この設定で
public class FooController : ApiController, IFoo
{
[Route("~/Foo/Bar")]
[HttpGet]
public string Bar(string optionalA, int requiredB)
{
return DoStuff(optionalA, requiredB);
}
}
、どのように私はオプションとしてA
とB
などを飾ることができます簡単にするために、インターフェースは次のようになりますのは、言わせてIFoo
を変更せずに(つまり、AとBを並べ替えることはできません)、コントローラーにIFooを実装している間は必要ですか?既定では、すべての文字列パラメータは、私がRequiredAttribute
でそれらを飾らない限り、オプションにデフォルトに戻すクラスにそれらを引っ張らない限り必須ですが、それはIFoo
の変更を必要とするか、このコントローラクラスでIFoo
を実装します。
Swagger & Swagger UIがそれを賞賛する方法でこれを行うためのまっすぐな方法がありますか?私が持っている
public string Bar(int requiredB, string optionalA = null)
ハッキーな解決策が必要です。あなたはこれも多かれ少なかれ同じことをすることができます 'public string FakeBar(int requiredB、string optionalA = null) { return bar(optionalA、requiredB); } ' – Nkosi
JSなどのクライアントからWeb APIを呼び出すときには、引数の値を名前で設定します。右? Web APIメソッドの引数の順序が重要なのはなぜですか?あなたのAPIの呼び出し側に影響を与えずに、C#requireのようなオプションのパラメータを最後に置くことができるはずです –
@GlennFerrieもし私がそうするなら、私はもはやこのコントローラクラスでIFooを実装していません。 – Jaxidian