请求体需要绑定一个复杂的模型,所以不能直接绑定string,如果要绑定这个值,这里有两种方法。
第一种方法是创建一个包含此属性的类:
public class Test
{
public string Name { get; set; }
}
然后在您的代码中绑定此类:
[BindProperty]
[FromBody]
public Test test { get; set; }
第二种方法是自定义模型绑定:
public class MyBinder : IModelBinder
{
public async Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
throw new ArgumentNullException(nameof(bindingContext));
var modelName = bindingContext.FieldName;
string bodyAsText = await new StreamReader(bindingContext.HttpContext.Request.Body).ReadToEndAsync();
if (bodyAsText == null)
{
return;
}
//check if the key equals fieldName
var key = bodyAsText.Trim().Substring(12, modelName.Length);
if (!modelName.Equals(key))
{
return;
}
//get the value.
var result = bodyAsText.Split(":")[1];
var a = result.Substring(2, result.IndexOf("
") - 3);
bindingContext.Result = ModelBindingResult.Success(a);
}
}
然后你可以绑定一个字符串值:
[BindProperty]
[ModelBinder(BinderType = typeof(MyBinder))]
public string Name { get; set; }