Nano Hash - криптовалюты, майнинг, программирование

Публикация массива в HTTP-триггер функции Azure возвращает код состояния 500.

У меня есть очень простая функция, запускаемая Azure HTTP, которая получает POST с данными:

{
    "symbols": ["Azure1", "Azure2", "Azure3"]
}

И моя функция Azure:

#r "Newtonsoft.Json"
using System.Net;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
    string symbols = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "symbol", true) == 0)
        .Value;

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    // Set name to query string or body data
    symbols = symbols ?? data?.symbols;

    return symbols == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, symbols, JsonMediaTypeFormatter.DefaultMediaType);
}

Однако я получаю ответ 500 с сообщением об ошибке: Cannot implicitly convert type 'Newtonsoft.Json.Linq.JArray' to 'string'. An explicit conversion exists (are you missing a cast?).

Кто-нибудь видит, где я могу ошибаться? Я ожидаю, что ответ функции будет таким:

["Azure1", "Azure2", "Azure3"]

Ответы:


1

Ошибка имеет смысл. Вы объявляете symbols как string, но позже присваиваете ему data?.symbols, который является массивом. Отсюда и сообщение Cannot implicitly convert type 'Newtonsoft.Json.Linq.JArray' to 'string'.

Если вы не хотите поддерживать передачу данных через строку запроса, вам следует просто избавиться от логики этой строки запроса. например попробуй это:

#r "Newtonsoft.Json"
using System.Net;
using System.Net.Http;
using System.Net.Http.Formatting;
using Newtonsoft.Json.Linq;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    dynamic data = await req.Content.ReadAsAsync<object>();
    JArray symbols = data?.symbols;

    return symbols == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass symbols in the body")
        : req.CreateResponse(HttpStatusCode.OK, symbols, JsonMediaTypeFormatter.DefaultMediaType);
}
28.11.2017
  • Я нахожу автоматически сгенерированную функцию C# по умолчанию немного запутанной. Он читает и запрос, и тело, использует object и dynamic — просто не лучший образец для начинающих. То же самое касается F#. 28.11.2017
  • Спасибо @David. Это сделало это. И Михаил, я полностью согласен! 28.11.2017
  • Немного побочной темы от проблемы преобразования типов. Возможно, шаблон по умолчанию действительно сбивает с толку. Он пытается продемонстрировать несколько методов, поэтому он выполняет как строку запроса, так и тело. Но это делает его более сложным. Мы можем передать это на github.com/Azure/azure-webjobs-sdk-templates. /issues для дальнейшего обсуждения. 28.11.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..