asp.net-core - 将 int(1 和 0)转换为 bool(true 和 false)以进行复杂类型属性的模型绑定的最佳方法是什么?
问题描述
我正在将一些服务集成到我的服务器中。但是提供者 api 使某些字段使用 1 和 0 来表示 bool 真假。所以我想在模型绑定发生时进行自定义转换。
请求发送到我的服务器:
{
...
"prefix_success": "1" // or "0"
...
}
我的模型:
public class RequestForm {
...
public bool Success { get; set; }
...
}
解决方案
我认为这是最简单的。谢谢你们。
粘合剂:
public class IntToBoolModelBinder : IModelBinder {
public Task BindModelAsync(ModelBindingContext bindingContext) {
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
var value = valueProviderResult.FirstValue;
if (int.TryParse(value, out var intValue)) {
bindingContext.Result = ModelBindingResult.Success(intValue == 0 ? false : true);
} else if (bool.TryParse(value, out var boolValue)) {
bindingContext.Result = ModelBindingResult.Success(boolValue);
} else if (string.IsNullOrWhiteSpace(value)) {
bindingContext.Result = ModelBindingResult.Success(false);
} else {
bindingContext.ModelState.TryAddModelError(bindingContext.ModelName,
$"{bindingContext.ModelName} should be a int, bool or empty string.");
}
return Task.CompletedTask;
}
}
用法:
public class Model {
...
[BindProperty(BinderType = typeof(IntToBoolModelBinder))]
public bool MarketingConsent { get; set; }
...
}
推荐阅读
- python - Django 多组权限
- c# - 为什么 gRPC 不维护服务方法调用之间的状态?
- bash - 无法使用 sdkman 构建 dockerfile
- visual-studio-code - 如何在 VSCode 中处理 Command 'extension.commandName' not found 错误
- google-chrome - chrome浏览器的地址栏自动完成是如何工作的
- python - 仅当未在 Python 类中定义时才覆盖使用自变量
- python-3.x - 明智地取出所有类型的电影
- python - 如何根据另一个对象的位置使某物旋转
- char - 乳胶表:在表格单元格中包含“\ n”?
- json - 如何为 Apache Flink 创建自定义 POJO