Как зарегистрироваться Перенаправить URL на webhook

Основываясь на великом ответе Тодда , который построен на большом ответе Aydin , здесь есть метод расширения generic , который не требует каких-либо параметров типа.

/// 
/// Gets human-readable version of enum.
/// 
/// DisplayAttribute.Name property of given enum.
public static string GetDisplayName(this T enumValue) where T : IComparable, IFormattable, IConvertible
{
    if (!typeof(T).IsEnum)
        throw new ArgumentException("Argument must be of type Enum");

    DisplayAttribute displayAttribute = enumValue.GetType()
                                                 .GetMember(enumValue.ToString())
                                                 .First()
                                                 .GetCustomAttribute();

    string displayName = displayAttribute?.GetName();

    return displayName ?? enumValue.ToString();
}

Мне это понадобилось для моего проекта, потому что что-то вроде кода ниже, где не каждый член перечисления имеет DisplayAttribute, не работает с решением Тодда:

public class MyClass
{
    public enum MyEnum 
    {
        [Display(Name="ONE")]
        One,
        // No DisplayAttribute
        Two
    }
    public void UseMyEnum()
    {
        MyEnum foo = MyEnum.One;
        MyEnum bar = MyEnum.Two;
        Console.WriteLine(foo.GetDisplayName());
        Console.WriteLine(bar.GetDisplayName());
    }
}
// Output:
//
// ONE
// Two

Если это сложное решение простой проблемы, сообщите мне, но это было исправление, которое я использовал.

1
задан Theodorus Agum Gumilang 16 January 2019 в 09:37
поделиться

2 ответа

Уже нашли, как заставить это работать, кажется, что нам нужно вернуть int в нашем методе get, который мы получаем из строки параметров paramst вместо строки, я использовал asp net core 2.2, чтобы сделать мой URL обратного вызова. Вот посмотрите мой пример кода для сохранения в базе данных тоже

    [HttpGet]
    public int Get()
    {

        int validationToken = Convert.ToInt32(HttpContext.Request.Query["validationToken"]);

        return validationToken;
    }

    [HttpPost]
    public void Post([FromBody]JObject rawBody)
    {

            using (TheoDBContext db = new TheoDBContext())
            {

                var jsonData = rawBody["data"];
                string name = rawBody["fromUserName"].ToString();
                string title = jsonData["title"].ToString();

                Kaizala newKaizala = new Kaizala();
                newKaizala.Name = name;
                newKaizala.Question = title;
                newKaizala.Answer = "yes";
                db.Kaizala.Add(newKaizala);
                db.SaveChanges();
            }




    }
0
ответ дан Theodorus Agum Gumilang 16 January 2019 в 09:37
поделиться

Это не факт, что вы возвращаетесь int, что это сработало.

Первая попытка не удалась из-за ошибки при вызове

Request.Headers.GetValues("validationToken").FirstOrDefault().ToString();

Скорее всего, исключение нулевой ссылки, поскольку вы пытались получить доступ к токену в заголовке, в то время как связанная документация сообщает

Kaizala сгенерирует токен проверки и отправит GET-запрос вашему веб-крюку с параметром запроса «validationToken».

выделение мин

, которого избегали в обновленном используемом

HttpContext.Request.Query["validationToken"]

Я бы предложил обновить синтаксис to

[HttpGet]
public IActionResult Get() {
    var validationToken = Request.Query["validationToken"];
    return Content(validationToken);
}

Конечно, вы можете выполнить рефакторинг, чтобы добавить код проверки для ожидаемого параметра строки запроса.

Я предлагаю выше, потому что нет никакой гарантии, что токен будет действительным int на основании документации. И даже если это так, этот подход был бы более гибким, если бы они когда-либо отказались от использования целых чисел в качестве токенов.

В требованиях просто говорится

Предполагается, что ваша служба возвращает токен проверки (полученный в запросе) в теле ответа в виде простого текста

с это, только вернуть именно то, что было отправлено. Не пытайтесь вносить в него какие-либо изменения.

0
ответ дан Nkosi 16 January 2019 в 09:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: