У меня возникла проблема, похожая на https://github.com/aspnet/AspNetCore/issues/4008, и я хотел бы помочь с ней вообще.
Для URL http://localhost:51049/api/values/proof_of_address маршрут должен оценивать proof_of_addressкак ProofOfAddress в перечислении ниже.
Я пытался следовать примеру по ссылке выше, но независимо от того, что я вставил в URL, я получаю первое значение в перечислении.Мой код выглядит следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddJsonOptions(opt =>
{
opt.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.None;
opt.SerializerSettings.Converters.Add(new StringEnumConverter());
});
}
[HttpGet("{documenttype}")]
public ActionResult<string> Get([FromRoute] DocumentType documenttype)
{
return documenttype.ToString();
}
public class CustomEnumConverter<T> : TypeConverter
{
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
var s = value as string;
if (string.IsNullOrEmpty(s))
{
return null;
}
return JsonConvert.DeserializeObject<T>(@"""" + value.ToString() + @"""");
}
}
[TypeConverter(typeof(CustomEnumConverter<DocumentType>))]
public enum DocumentType
{
[EnumMember(Value = "passport")]
Passport,
[EnumMember(Value = "proof_of_address")]
ProofOfAddress
}
Любая помощь будет оценена, спасибо.