Ich erstelle eine benutzerdefinierte ModelBinder in .NET Core 1.1.0, und ich denke, ich habe es meist herausgefunden. Ich möchte diesen Ordner nur verwenden, wenn ich das möchte, aber ich kann mir nicht vorstellen, wie ich das bewerkstellige. Ich möchte, dass dieses Modellbinder ignoriert wird, wenn ich es nicht anrufe, aber wenn ich es anrufe, möchte ich alle andere ignoriert werden. Wie kann ich das erreichen?Call benutzerdefinierte ModelBinder in .NET Core
Die zwei Dinge, die machbar scheinen, sind die Parameterattribute [Bind]
und [ModelBinder]
, aber keine von diesen wirklich funktioniert.
Ich versuchte zunächst, die unten:
[HttpGet]
public async Task<IActionResult> Get([Bind("test")] int userId)
{
// stuff
}
Wenn meine benutzerdefinierte IModelBinderProvider
getroffen wird, die ModelBinderProviderContext
eine BindingInfo
Eigenschaft enthält, die wiederum ein IPropertyFilterProvider
enthält. Beim Debuggen enthält dieser Filteranbieter eine Sammlung namens Include
mit dem Wert test
. Es scheint jedoch keine Möglichkeit zu geben, dies programmatisch zu überprüfen - es gibt keine Möglichkeit, dass ich tatsächlich auf diese Sammlung zugreifen kann. Es ist null, wenn nichts gesetzt ist, also könnte ich hypothetisch nach Null suchen, aber das ist sehr chaotisch und ist keine gute Idee.
Zur Veranschaulichung hier ist der Debugger-Info für das ModelBinderProviderContext
:
Als nächstes habe ich versucht, diesen Code verwenden:
[HttpGet]
public async Task<IActionResult> Get(
[ModelBinder(BinderType = typeof(MyModelBinder))] int userId
)
{
// stuff
}
Dieses Attribut wird keinerlei Wirkung zu haben. Es ist nicht erforderlich MyModelBinder
zu verwenden; Modellbinder werden in der Reihenfolge verwendet, die in Startup.cs
angegeben ist (die Liste in MvcOptions
).