【发布时间】:2021-01-26 07:36:36
【问题描述】:
我想从 ASP.Net Core 中的查询字符串参数构造一个具有非默认构造函数的对象。本质上,我有两个模型,它们有一个具有不同参数化的共同祖先类.根据 API 端点中的某些条件,将使用查询字符串中的参数构造一个模型。
[HttpGet("{model}")]
public ModelBase Get(string model)
{
switch (model)
{
case "foo":
ModelFoo foo = GetModelFromQueryString<ModelFoo>();
return foo;
case "bar":
ModelBar bar = GetModelFromQueryString<ModelBar>();
return bar;
}
return null;
}
GetModelFromQueryString<TModel> 显然是我希望我知道存在的神奇功能。如果它已经存在或者有人可以帮助提供实现细节,那将回答我的问题。
示例模型类如下所示:
class ModelFoo : ModelBase
{
public ModelFoo(int param1=1, int param2=2)
{
// ...
}
}
class ModelBar : ModelBase
{
public ModelBar(int paramBaz=3)
{
// ...
}
}
理想情况下,这将使以下 HTTP 调用产生所需的结果:
-
GET api/foo?param1=7&param2=9产生new ModelFoo(param1:7, param2:9)。 -
GET api/bar?paramBaz=42产生new ModelBar(paramBaz:42)。 -
GET api/foo产生new ModelFoo(param1:1, param2:2)。 -
GET api/foo?param2=11产生new ModelFoo(param1:1, param2:11)。
我该怎么办?我应该完全重组吗?
我意识到这可能是一个复杂的多方面问题,因此非常感谢任何和所有帮助!
【问题讨论】:
标签: asp.net-core model-binding api-design optional-parameters constructor-overloading