如果我有幾個派生類,有沒有一種方法可以創建一個使用反射來處理它們的控制器?使用帶反射的[FromBody]發佈
[Route("api/{type:regex(forma|formb|formc)}")]
public class FormController : BaseController
{
...
[HttpPost]
public IActionResult CreateOrUpdateForm([FromBody] FormA forma, string type)
{
var formType = GetTypeFromName(type);
var submitMethod = _formService
.GetType()
.GetMethod("SaveForm")
.MakeGenericMethod(new Type[] {formType});
var savedForm = submitMethod.Invoke(_formService, new object[]{forma});
return createOkResponse(new
{
form = savedForm
});
}
}
當我發佈FormA
對象,但顯然不會,如果我發佈FormB
或FormC
這工作。我試圖將其設置爲[FromBody] BaseForm form
,但那也不起作用。是這樣的可能/好主意?後端邏輯是所有一切形式相同這就是爲什麼我試圖做到這一點
這是可能的。我做過一次。在我看來,這是一個可怕的想法:-) –
哈哈謝謝,你爲什麼認爲這是一個可怕的想法? – John
我不認爲增加閱讀和調試代碼的複雜性是值得的。如果你封裝了共享邏輯,並且有許多類似的操作方法可以調用它,我懷疑你會發現它是一個維護的負擔,並且整個界面將更容易理解。 –