gpt4 book ai didi

c# - 客户截断查询字符串,导致 FormatException

转载 作者:太空狗 更新时间:2023-10-29 21:58:43 26 4
gpt4 key购买 nike

在 Rentler,我们经常看到错误

System.FormatException, String was not recognized as a valid Boolean

在我们的健康监测中。事实证明,看起来我们的客户在将其复制/粘贴到其他地方时偶尔会截断 url 的末尾。碰巧 bool 参数往往位于字符串的末尾,当客户通过某些社交网络共享它时,我们会收到错误报告。

https://{domain}/search?sid=17403777&nid=651&location=840065&propertytypecode=1&photosonly=fals

我们对所有内容都使用模型绑定(bind),所以我不太确定如何处理这个问题。我可以将该属性更改为一个字符串并尝试在 Controller 操作中解析它,但这很草率。是否有任何简单、流畅的方法让模型绑定(bind)器使用 TryParse() 并在不能时解析为 false?

最佳答案

bool 数据类型的自定义模型绑定(bind)器怎么样?你需要这样的东西:

/// <summary>
/// A custom model binder for boolean values. This behaves the same as the default
/// one, except it will resolve the value to false if it cannot be parsed.
/// </summary>
public class BooleanModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

//MVC checkboxes need specific handling in checked state
if (string.Equals(valueResult.AttemptedValue, "true,false"))
{
AddToModelState(bindingContext, valueResult);
return true;
}

bool parsed = false;
if (Boolean.TryParse(valueResult.AttemptedValue, out parsed))
{
AddToModelState(bindingContext, valueResult);
return parsed;
}

return false;
}

private static void AddToModelState(ModelBindingContext bindingContext, ValueProviderResult valueResult)
{
bindingContext.ModelState.Add(bindingContext.ModelName, new ModelState { Value = valueResult });
}
}

//in Global.asax
protected void Application_Start()
{
...
ModelBinders.Binders.Add(typeof(bool), new BooleanModelBinder());
}

关于c# - 客户截断查询字符串,导致 FormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12901253/

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