- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试做一些 model binding on simple types with TypeConverter
在 ASP.NET Core 2 中,即将 string
转换为我的自定义类型。
如果字符串格式错误,我想指出,例如通过抛出异常:
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
if (value is string s)
{
var result = Parse(s);
if (!result.Success)
{
throw new ArgumentException("Invalid format", nameof(value), result.Exception);
}
return result.Value;
}
return base.ConvertFrom(context, culture, value);
}
目前看来异常只是被吞没并被忽略,将绑定(bind)值保留为默认值。端点的调用者永远不会被告知该值是错误的,我在 Controller 中的代码也不知道该值最初是无效的(默认值很容易成为有效值)。
如果格式无效,我希望转换失败,但我该怎么做?
最佳答案
The caller of the endpoint is never told that the value is wrong, nor does my code in the controller know that the value was originally invalid (the default value could easily be a valid value).
所有模型绑定(bind)错误都通过 Controller 操作中可访问的 ControllerBase.ModelState
属性进行通信。 ModelState
将 IsValid
属性设置为 false
如果在模型期间发生某些错误 binding或 validation .
这是一种有意的关注点分离。与随心所欲的异常冒泡相比,这种方式有以下优点:
ModelState
中一起提供。使用异常方法时,只会传达第一次遇到的错误。ModelState
,您可以在后续管道阶段采取适当的操作,并决定是否仍然可以处理遇到错误的请求。ModelState
方法在错误处理方面更加灵活。您可以返回适当的响应(例如 400 Bad Request
或返回带有详细错误描述的 HTML View )。处理无效模型状态的最基本方法是通过检查 ModelState.IsValid
值的瘦操作过滤器:
public class CheckModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
}
在 Startup.ConfigureServices() 中注册过滤器:
services.AddMvc(options =>
{
options.Filters.Add(new CheckModelStateAttribute());
});
在模型绑定(bind)错误的情况下,HTTP错误代码400 Bad Request
将返回给调用者, Controller Action 将不会被调用。
关于c# - 如何指示 TypeConverter 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49696060/
似乎 TypeConverter.IsValid() 使用了当前的线程文化,但 TypeConverter.ConvertFrom() 没有。 这使得将 TypeConverter.IsValid()
我已将 Room 集成到我的项目中。在这个项目中,一些类在 Kotlin 中,一些在 Java 中。在我使用 Android Studio Ctrl+Alt+Shift+K 组合将我的 Java 文件
我在实现 Room 的类型转换器时出错。 error: Cannot figure out how to save this field into database. You can consider
这很烦人: 我想要这个: 所以我写了一个TypeConverter: public class PenConverter : TypeConverter {
我正在使用 4.0,我正在尝试通过开发一些用于类型转换的辅助方法来让我的生活更轻松。以下方法运行良好。它将从任何字符串转换为其他数据类型。 System.ComponentModel; public
我正在尝试向我的房间数据库中添加一个“图片”字段,其中包含一个名为 MyPicture 的自定义对象,该对象具有以下属性。 private String id; private User user;
我有一个简单的 TypeConverter将逗号分隔的字符串转换为 IEnumerable在调用我的 API 端点时缩短 url。 因此我有一个在客户端设置并传递给服务器的请求对象。所以,在服务器上它
为什么那些返回 true: TypeDescriptor.GetConverter(typeof(double)).CanConvertTo(typeof(double)); TypeDesc
我想创建一个 TypeConverter对于通用类,像这样: [TypeConverter(typeof(WrapperConverter))] public class Wrapper { p
我正在开发一个 IValueConverter 实现,它可以转换 bool? 值。为了通用性,我决定使用 TypeConverter 将输入值转换为 bool?。因为它的主要目的是用作 XAML 绑定
我正在尝试编写这样的标记扩展: [MarkupExtensionReturnType(typeof(Length))] public class LengthExtension : MarkupExt
我正在寻找一种将附加信息传递给 TypeConverter 的方法,以便在不创建自定义构造函数的情况下为转换提供一些上下文。 传递的额外信息将是包含我正在转换的属性的原始对象(在编译时称为接口(int
我目前正在学习 Room Persistence,我只想问一下如何为自定义类创建 TypeConverter? Brand.kt @Parcelize @Entity(tableName = "bra
在我看来,与 TypeConverter 相比,实现隐式运算符非常容易,因此我假设它们不等效,因为框架中普遍存在 TypeConverters(请参阅扩展 FrameworkElement 的任何内容
我有一个 PowerShell 类,我想自动从 string 转换它。 所以我这样定义了一个TypeConverter: class StringToAcmeStateConverter :
到目前为止,为了存储在房间数据库中,我一直在为每个类使用类型转换器。像这样: @SerializedName("sidebar") @Expose @TypeConverters(SidebarCon
我有一个具有以下属性的类: [TypeConverter(typeof(SomeNameEnumValueConvert))] public Example ExampleName { get; se
使用 CsvHelper,当我想要一个自定义解析器时(例如,我想要一个输入字符串为“f”的 MyBooleanConverter 将为 false,“t”将为是真实的”)。但是对于每个类我都必须编写映
我正在研究 XAML 中声明的泛型类型的初始化成员。这是针对 (reduced) generics support在 WPF 4 和 future 的 Silverlight 中。 (我已经在 VS2
我已按照有关如何为自定义类型添加 TypeConverter 的房间文档进行操作,但我的实体类仍然出现错误。我想简单地将 Category 枚举转换为 String,以便房间数据库了解如何存储它。下面
我是一名优秀的程序员,十分优秀!