c# - dotnet core 1.1.1、mvc 1.1.2 中未调用模型绑定(bind)程序提供程序

标签 c# asp.net-core asp.net-core-mvc .net-core

我使用向导创建了一个全新的 .netcore 项目,并添加了以下内容。

模型绑定(bind)器提供程序从未被调用

这是一个错误吗?我缺少什么?如果我只是在 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;
    }
}

Binder

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);
}

最佳答案

事实证明,Add 方法没有达到预期的结果,因为模型绑定(bind)器是按顺序求值的,直到选择一个为止。

在 dotnet core 中添加模型绑定(bind)器的唯一方法是使用 Insert

services.AddMvc(
    _ =>
    {
        _.ModelBinderProviders.Insert(0, new PartyModelBinderProvider());
    });

关于c# - dotnet core 1.1.1、mvc 1.1.2 中未调用模型绑定(bind)程序提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43167233/

相关文章:

c# - 如何在 HttpModule 中执行 XSLT 转换?

c# - 使用 Cosmos db 删除社交媒体应用程序中删除帖子的评论的正确方法

c# - 合并列表的最小和

c# - 带有协议(protocol)的 Url.Action 返回没有域的链接

c# - .NET Core Identity as UI 取消注册

c# - 为什么在Nuget上找到的包不是最新版本?

c# - 从 ViewModel 在 View 上创建一个自动生成的 DropDownList

asp.net-core - 带有继承的 ASPNET Core 3.0 模型验证错误

c# - 将所有发布的字符串修剪为 API ASP.NET CORE 3.x

c# - Dapper 一对多关系