gpt4 book ai didi

asp.net - 从主体绑定(bind)时如何创建自定义模型绑定(bind)器?

转载 作者:行者123 更新时间:2023-12-03 04:16:41 25 4
gpt4 key购买 nike

我一直在尝试使用模型绑定(bind)来使我们的 API 更易于使用。使用 API 时,当数据位于正文中时,仅当它是查询的一部分时,我无法获取要绑定(bind)的模型绑定(bind)。

我的代码是:

public class FunkyModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var model = (Funky) bindingContext.Model ?? new Funky();

var hasPrefix = bindingContext.ValueProvider
.ContainsPrefix(bindingContext.ModelName);
var searchPrefix = (hasPrefix) ? bindingContext.ModelName + "." : "";
model.Funk = GetValue(bindingContext, searchPrefix, "Funk");
bindingContext.Model = model;
return true;
}

private string GetValue(ModelBindingContext context, string prefix, string key)
{
var result = context.ValueProvider.GetValue(prefix + key);
return result == null ? null : result.AttemptedValue;
}
}

当查看bindingContext上的ValueProvider属性时,我只看到QueryStringValueProviderRouteDataValueProvider,我认为这意味着如果数据在正文中我将无法获取它。我该怎么做?我想支持以 json 或表单编码形式发布数据。

最佳答案

我也在研究这个。

WebApis Model Binder 附带两个内置 ValueProvider。

QueryStringValueProviderFactory 和 RouteDataValueProviderFactory

当你打电话时会搜索到

context.ValueProvider.GetValue

这个问题有一些关于如何从正文绑定(bind)数据的代码。

how to pass the result model object out of System.Web.Http.ModelBinding.IModelBinder. BindModel?

您也可以创建一个自定义 ValueProvider 来执行此操作,这可能是一个更好的主意 - 将搜索与键匹配的值。上面的链接只是在模型绑定(bind)器中执行此操作,这限制了 ModelBinder 只能在主体中查找。

public class FormBodyValueProvider : IValueProvider
{
private string body;

public FormBodyValueProvider ( HttpActionContext actionContext )
{
if ( actionContext == null ) {
throw new ArgumentNullException( "actionContext" );
}

//List out all Form Body Values
body = actionContext.Request.Content.ReadAsStringAsync().Result;
}

// Implement Interface and use code to read the body
// and find your Value matching your Key
}

关于asp.net - 从主体绑定(bind)时如何创建自定义模型绑定(bind)器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15473822/

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