Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
420 views
in Technique[技术] by (71.8m points)

c# - Json.Net and validation of Enums in Web API

I'm writing a web api in .Net Core 2.2. I have an enumeration as follows:

using System.Runtime.Serialization;

namespace MyNamespace
{
    public enum MyEnum
    {
        [EnumMember(Value = "Some Value")]
        SomeValue
    }
}

If I pass in random data as MyEnum in a request using the enum I rightly get an error, but if I pass "Some Value" or "SomeValue" it passes. How do I make "SomeValue" invalid? "SomeValue" isn't in my swagger and isn't a value I want to accept.

So basically, model validation passes for "SomeValue" when that isn't really valid.

Any ideas how I can make only "Some Value" valid? Thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

If I Understand Correctly the Question.You Can Use This Sample For Get 'Some Value' Instead Of 'SomeValue':

using System.ComponentModel;

 public enum MyEnum
    {
        [Description("Some Value")]
        SomeValue
    }

Create StringEnumExtension Class :

public static class StringEnumExtension
    {
        public static string GetDescription<T>(this T e) 
        {
            string str = (string) null;

            if ((object) e is Enum)
            {
                Type type = e.GetType();
                foreach (int num in Enum.GetValues(type))
                {
                    if (num == Convert.ToInt32(e, CultureInfo.InvariantCulture))
                    {
                        object[] customAttributes = type.GetMember(type.GetEnumName((object) num))[0]
                            .GetCustomAttributes(typeof(DescriptionAttribute), false);
                        if ((uint) customAttributes.Length > 0U)
                        {
                            str = ((DescriptionAttribute) customAttributes[0]).Description;
                        }

                        break;
                    }
                }
            }

            return str;
        }
    }

Then Use the Code Below to Call :

 var result = MyEnum.SomeValue.GetDescription();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...