Я пытаюсь реализовать интерфейс в качестве сервисного контроллера. Я не поддерживаю этот интерфейс, поэтому я не могу его изменить. Для простоты предположим, что интерфейс выглядит следующим образом:Необязательный ввод строки, если следующие строковые входы не являются необязательными?
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 отличием? Я хотел бы избежать этого Hacky решение:
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; }
}
Я понимаю, что если бы я мог изменить порядок А и В (это не вариант), то простое решение заключается в следующем:
public string Bar(int requiredB, string optionalA = null)
Решение Hacky должно работать. вы также можете сделать это, что более или менее одно и то же »public string FakeBar (int requiredB, string optionalA = null) { return Bar (optionalA, requiredB); } ' – Nkosi
, когда вы вызываете веб-API от JS или какого-либо другого клиента, вы устанавливаете значения для аргумента по имени. правильно? так почему смысл аргументов в методе веб-API значителен? Вы должны иметь возможность поставить свои дополнительные параметры в конце, как это требует C#, не оказывая влияния на вызывающего пользователя вашего API. –
@GlennFerrie. Если я это сделаю, то я больше не буду реализовывать IFoo с этим классом Controller. – Jaxidian