gpt4 book ai didi

asp.net-mvc-4 - ASP.NET Web API - 模型绑定(bind)器

转载 作者:行者123 更新时间:2023-12-04 11:18:39 25 4
gpt4 key购买 nike

我需要使用某种自定义模型绑定(bind)器来始终以英国格式处理传入日期,我已经设置了自定义模型绑定(bind)器并像这样注册:

GlobalConfiguration.Configuration.BindParameter(typeof(DateTime), new DateTimeModelBinder());

这似乎只适用于查询字符串参数,并且只有在我像这样在参数上指定 [ModelBinder] 时才有效,有没有办法让所有操作都使用我的模型绑定(bind)器:
public IList<LeadsLeadRowViewModel> Get([ModelBinder]LeadsIndexViewModel inputModel)

另外,如何将我发布的表单发送到我的 Api Controller 以使用我的模型绑定(bind)器?

最佳答案

您可以通过实现 ModelBinderProvider 并将其插入到服务列表中来全局注册模型绑定(bind)器。

Global.asax 中的使用示例:

GlobalConfiguration.Configuration.Services.Insert(typeof(ModelBinderProvider), 0, new Core.Api.ModelBinders.DateTimeModelBinderProvider());

下面是演示 ModelBinderProvider 和 ModelProvider 实现的示例代码,它们以文化感知方式(使用当前线程文化)转换 DateTime 参数;

DateTimeModelBinderProvider 实现:
using System;
using System.Web.Http;
using System.Web.Http.ModelBinding;

...
public class DateTimeModelBinderProvider : ModelBinderProvider
{
readonly DateTimeModelBinder binder = new DateTimeModelBinder();

public override IModelBinder GetBinder(HttpConfiguration configuration, Type modelType)
{
if (DateTimeModelBinder.CanBindType(modelType))
{
return binder;
}

return null;
}
}

DateTimeModelBinder 实现:
public class DateTimeModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
ValidateBindingContext(bindingContext);

if (!bindingContext.ValueProvider.ContainsPrefix(bindingContext.ModelName) ||
!CanBindType(bindingContext.ModelType))
{
return false;
}

bindingContext.Model = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName)
.ConvertTo(bindingContext.ModelType, Thread.CurrentThread.CurrentCulture);

bindingContext.ValidationNode.ValidateAllProperties = true;

return true;
}

private static void ValidateBindingContext(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException("bindingContext");
}

if (bindingContext.ModelMetadata == null)
{
throw new ArgumentException("ModelMetadata cannot be null", "bindingContext");
}
}

public static bool CanBindType(Type modelType)
{
return modelType == typeof(DateTime) || modelType == typeof(DateTime?);
}
}

关于asp.net-mvc-4 - ASP.NET Web API - 模型绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12246254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com