인터페이스를 서비스 컨트롤러로 구현하려고합니다. 이 인터페이스를 유지하지 않으므로 수정할 수 없습니다.다음 문자열 입력이 선택 사항이 아닌 경우 선택적 문자열 입력?
내 컨트롤러에 대한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);
}
}
, 어떻게 선택하고 B
등으로 A
을 장식 할 수 단순화를 들어, 인터페이스는 다음과 같습니다 가정 해 봅시다 IFoo
을 변경하지 않고 (즉, A와 B를 재정렬 할 수 없음), 컨트롤러에 IFoo를 구현하는 동안 필요합니까? 기본적으로 모든 문자열 매개 변수는 필요하다고 간주됩니다. 어떤 클래스에서 어떤 옵션을 기본값으로 되돌리려면 RequiredAttribute
으로 꾸며야합니다. 그러나 IFoo
을 변경하거나 내 요구 사항을 위반하게되므로 여기서는 수행 할 수 없습니다. 이 컨트롤러 클래스를 사용하여 IFoo
을 구현하십시오.
Swagger & Swagger UI가이를 존중하는 방식으로이를 수행 할 수있는 방법이 있습니까? 나는이 해키 솔루션을 피하기 위해 싶습니다
public class FooController : ApiController, IFoo
{
[Route("~/Foo/Bar")]
[HttpGet]
public string FakeBar(MyDto data)
{
return Bar(data.optionalA, data.requiredB);
}
[ApiExplorerSettings(IgnoreApi = true)]
public string Bar(string optionalA, int requiredB)
{
return DoStuff(optionalA, requiredB);
}
}
public class MyDto
{
// defaults to optional here
public string optionalA { get; set; }
[Required]
public int requiredB { get; set; }
}
이해 할을하는 나는 순서를 변경 할 수 있다면 A와 B (즉 옵션이 아니다) 후 간단한 해결책이있다 :
public string Bar(int requiredB, string optionalA = null)
해키 솔루션이 작동해야합니다. 당신은 또한 이것을 어느 정도 할 수있다.'public string FakeBar (int requiredB, string optionalA = null) { return bar (optionalA, requiredB); }' – Nkosi
JS 또는 다른 클라이언트에서 웹 API를 호출 할 때 이름의 인수 값을 설정합니다. 권리? 그렇다면 웹 API 방법의 논쟁 순서가 중요한 이유는 무엇입니까? API 호출자에게 영향을 미치지 않고 C# require와 같은 끝에 선택적 매개 변수를 넣을 수 있어야합니다. –
@GlennFerrie 이렇게하면이 Controller 클래스로 IFoo를 구현할 필요가 없습니다. – Jaxidian