我使用向导创建了一个全新的.netcore项目,并添加了以下内容。
永远不会调用模型Binder提供程序
这是一个错误吗?我错过了什么?如果我只是在GetBinder
中抛出异常,那么它永远不会到达。
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc(
_ =>
{
_.ModelBinderProviders.Add(new PartyModelBinderProvider());
});
}
提供者
public class PartyModelBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context.Metadata.ModelType == typeof(Party))
return new PartyModelBinder();
return null;
}
}
活页夹
public class PartyModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
return Task.CompletedTask;
}
}
我的行动方法非常简单。
[HttpGet]
public IActionResult Test()
{
return View(new Party());
}
[HttpPost]
public IActionResult Test(Party party)
{
return View(party);
}
答案 0 :(得分:2)
事实证明Add
方法没有达到预期的结果,因为模型绑定器按顺序进行评估,直到选择了一个。
在 dotnet核心中添加模型绑定器的唯一方法是使用Insert
。
services.AddMvc(
_ =>
{
_.ModelBinderProviders.Insert(0, new PartyModelBinderProvider());
});