我正在尝试将接口实现为服务控制器。我没有维护这个界面,所以我无法修改它。为简单起见,我们假设接口如下所示:
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
而不更改RequiredAttribute
(即无法重新排序A和B)并且仍然让我的控制器实现IFoo?默认情况下,所有字符串参数都被视为必需,除非我将它们拉入一个类,此时它们将恢复默认为Optional,除非我用IFoo
装饰它们但我不能在这里做,因为这需要更改{{ 1}}或者会破坏我用这个控制器类实现IFoo
的要求。
是否有一种直接的方法来实现Swagger& amp; 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)
答案 0 :(得分:0)
我发现我无法做到这一点。我被迫改变界面或不实现接口或其他一些令人讨厌的东西导致额外的代码太多。在这个时候,我认为没有其他方法可以直接控制动作处理程序的参数要求。
欢迎任何纠正我的人! ; - )