http://stackoverflow.com/questions/24439997/nancy-decimal-property-binding-not-working
Oh noes! ---> Nancy.ModelBinding.ModelBindingException: Unable to bind to type: Nancy.Models.SomeModel
at Nancy.ModelBinding.DefaultBinder.Bind(NancyContext context, Type modelType, Object instance, BindingConfig configuration, String[] blackList)
at Nancy.ModelBinding.DynamicModelBinderAdapter.TryConvert(ConvertBinder binder, Object& result)
at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
at Nancy.ModelBinding.ModuleExtensions.Bind[TModel](INancyModule module)
at KBZServisNancy.Modules.SomeModule.<.ctor>b__2(Object x) in d:\Nancy\Modules\SomeDecimalModule.cs:line 38
at CallSite.Target(Closure , CallSite , Func`2 , Object )
at Nancy.Routing.Route.<>c__DisplayClass4.b__3(Object parameters, CancellationToken context)
--- End of inner exception stack trace ---
at Nancy.NancyEngine.InvokeOnErrorHook(NancyContext context, ErrorPipeline pipeline, Exception ex)
at Nancy.NancyEngine.InvokeOnErrorHook(NancyContext context, ErrorPipeline pipeline, Exception ex)
On dirait que c'est un bogue, je l'ai essayé moi-même avec une route et une décimale et j'ai obtenu la même exception.
DecimalConverter.ConvertFrom est utilisé dans le contexte de la culture actuelle, il attend "1,1" au lieu de "1.1" dans la culture turque. Une stratégie de secours peut être implémentée en utilisant ConvertFrom avec InvariantCulture. Acceptez-vous les demandes de tirage ?
Écrivez simplement votre propre ITypeConverter
``` c#
///
/// Convertisseur Nancy pour convertir des types numériques avec InvariantCulture.
///
classe publique NancyNumericConverter : ITypeConverter
{
public bool CanConvertTo (Type destinationType, contexte BindingContext)
{
return destinationType.IsNumeric();
}
public object Convert(string input, Type destinationType, BindingContext context)
{
if (string.IsNullOrEmpty(input))
{
return null;
}
return System.Convert.ChangeType(input, destinationType, CultureInfo.InvariantCulture);
}
}
```
Écrivez simplement votre propre
ITypeConverter
Merci pour la suggestion, ça marche très bien !
Mais il semble que System.Convert.ChangeType
ne supporte pas les types nullables.
Peut être corrigé en utilisant Nullable.GetUnderlyingType
comme ceci :
/// <summary>
/// Nancy converter to convert numeric types with InvariantCulture.
/// </summary>
public class InvariantCultureNumericConverter : ITypeConverter
{
public bool CanConvertTo(Type destinationType, BindingContext context)
{
return destinationType.IsNumeric();
}
public object Convert(string input, Type destinationType, BindingContext context)
{
if (string.IsNullOrEmpty(input))
{
return null;
}
destinationType = Nullable.GetUnderlyingType(destinationType) ?? destinationType;
return System.Convert.ChangeType(input, destinationType, CultureInfo.InvariantCulture);
}
}
Commentaire le plus utile
Écrivez simplement votre propre
ITypeConverter
``` c#
///
/// Convertisseur Nancy pour convertir des types numériques avec InvariantCulture.
///
classe publique NancyNumericConverter : ITypeConverter
{
public bool CanConvertTo (Type destinationType, contexte BindingContext)
{
return destinationType.IsNumeric();
}
```