C# 自定义模型活页夹不';不影响ASP.NET CORE 3.1中的属性

C# 自定义模型活页夹不';不影响ASP.NET CORE 3.1中的属性,c#,.net-core,model-binding,asp.net-core-3.1,.net-core-3.1,C#,.net Core,Model Binding,Asp.net Core 3.1,.net Core 3.1,我正在尝试为某些特定属性开发一些自定义模型绑定器,例如类型为string的属性。我有一个简单的活页夹和提供者: public class CustomModelBinderProvider : IModelBinderProvider { public IModelBinder GetBinder(ModelBinderProviderContext context) { if (context.Metadata.ModelType == typeof(string))

我正在尝试为某些特定属性开发一些自定义模型绑定器,例如类型为
string
的属性。我有一个简单的活页夹和提供者:

public class CustomModelBinderProvider : IModelBinderProvider {
    public IModelBinder GetBinder(ModelBinderProviderContext context) {
        if (context.Metadata.ModelType == typeof(string)) 
            return new BinderTypeModelBinder(typeof(CustomModelBinder));
        return null;
    }
}

public class CustomModelBinder : IModelBinder {
    public Task BindModelAsync(ModelBindingContext bindingContext) {
        // blah blah blah
        return Task.CompletedTask;
    }
}  
我在启动时注册了活页夹:

services.AddMvc(o => {o.ModelBinderProviders.Insert(0, new CustomModelBinderProvider());})
        .AddControllersAsServices();
下面是我正在测试的一个简单模型和操作:

public class Man {
    public string Phone { get; set; }
    public int Id { get; set; }
}

[ApiController]
[Route("[controller]/[action]")]
public class MyController : ControllerBase {

    [HttpPost]
    public object Des(Man model) {
        return new {Me = "amiry", Man = model};
    }
}
但是当我发布一个模型时,例如

{
    "id": 1,
    "phone": "some string"
}

对于该操作,
CustomModelBinderProvider.GetBinder
被命中一次,
context.Metadata.ModelType
的值总是
Man
类。虽然我期望每个属性都会被调用。那么,如何使用模型绑定器分别绑定每个属性呢?我知道我可以用属性注释属性。但我不想在我想处理的每个属性上添加一些属性。我正在寻找一种方法,用绑定器绑定属性,只需在启动时进行一些设置,如上面所述。你有什么想法吗?

你找到解决办法了吗?@RaviMPatel不幸的是,还没有):我不得不更改整个代码。我有一个日期的自定义活页夹。他面临着同样的问题。我可以通过为DateTime创建一个自定义JsonConverter来解决这个问题。在Startup.cs中注册,解决了问题。thanks@RaviMPatel我也不得不搬到定制转换器;但这不是答案。绑定问题仍未解决。您找到解决方案了吗?@RaviMPatel遗憾的是,还没有):我必须更改整个代码。我有一个自定义的日期绑定器。他面临着同样的问题。我可以通过为DateTime创建一个自定义JsonConverter来解决这个问题。在Startup.cs中注册,解决了问题。thanks@RaviMPatel我也不得不搬到定制转换器;但这不是答案。约束问题仍未解决。