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

Сообщение JSONAPI .NET не работает

У меня проблема с JSONAPI .NET.

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

WebApiConfig.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Web.Http;
using JSONAPI.Json;
using JSONAPI.Core;

namespace MyProjectWebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
            JsonApiFormatter formatter = new JsonApiFormatter();
            formatter.PluralizationService = new PluralizationService();
            config.Formatters.Add(formatter);
            GlobalConfiguration.Configuration.Formatters.Clear();
            GlobalConfiguration.Configuration.Formatters.Add(formatter);

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

У меня есть собственный класс и контроллер в MyClassController.cs:

namespace MyClassCreation
{

    [Serializable]
    public class MyClass
    {
        public string Param1 { get; set; }
        public string Param2 { get; set; }
        public string Param3 { get; set; }
        public string Param4 { get; set; }


        public MyClass(string param1, string param2, string param3, string param4)
        {
            Param1 = param1;
            Param2 = param2;
            Param3 = param3;
            Param4 = param4;
        }
    }

    public class MyController : JSONAPI.Http.ApiController<MyClass>
    {

        public HttpResponseMessage PostMyClass(MyClass newMyClass)
        {
            try
            {
                ...
            }
            catch (Exception x)
            {
                Messages.WriteLog(x);
                throw x;
            }
        }

        public IEnumerable<MyClass> GetMyClass(string value)
        {
            {
                List<MyClass> result = new List<MyClass>();
                result.Add(new MyClass(value, "2", "3", "4"));
                return result;
            }
            catch (Exception x)
            {
                Messages.WriteLog(x);
                throw x;
            }
        }
    }
}

Проблема в том, что GET работает, а POST нет. Я использовал Postman для генерации вызовов на сервер. Get проходит нормально и возвращает то, что должно. Поместите POST никогда не направлен на какой-либо маршрут. Сервер замечает вызов, а метод перехвата POST-вызова — нет.

Я также написал конструктор по умолчанию для MyClassController. Код попадает туда в отладчике, но уже не в метод PostMyClass.

Я также попробовал несколько атрибутов для метода, таких как [HttpPost] и [Route(...)].

Самое смешное, что когда я наследую MyClassController напрямую от класса .NET ApiController, POST работает, но я не получаю никаких данных JSON, поэтому у меня нет данных для работы.

Любая помощь?

Спасибо!!!

РЕДАКТИРОВАТЬ:

Замечено, что JSONAPI .NET требует, чтобы его метод базового класса ApiController был перезаписан и использовался для перехвата POST-вызова. Итак, теперь я могу получить POST-вызов, но все же полученные данные являются нулевыми, хотя исходные данные, отправленные в части тела сообщения, должны быть стандартным объектом JSON JSONAPI.

public override IList<MyClass> Post(IList<MyClass> postedObjs)
{
    return base.Post(postedObjs);
}

Данные были:

{
    "data": [{
        "type": "myClass",
        "attributes": {
            "param1": "1",
            "param2": "2",
            "param3": "3",
            "param4": "4"
        }
    }]
}

Итак, проблема в том, что postObj имеет значение null.

18.09.2015

  • Как выглядит ваш JSON, который вы используете для POST? Добавьте конструктор по умолчанию в свой класс MyClass. Я думаю, что это необходимо. Вы также должны использовать DataContractAttribute и DataMemberAttribute вместо SerializableAttribute 18.09.2015
  • Я думал, что конструктор по умолчанию все равно реализован сборкой. JSON: {"MyClass":{"Param1":"1","Param2":"2","Param3":"3","Param4":"4"}} 18.09.2015

Ответы:


1

Похоже, вы используете версию JSONAPI.NET 0.2.0, которая является последней в NuGet. К сожалению, эта версия устарела и не соответствует текущей версии JSON API. Версия на мастере довольно близко соответствует спецификации, хотя у меня не было времени отшлифовать ее и выпустить релиз. Примерная документация есть здесь.

21.09.2015
  • Спасибо! Я фактически понял это в то же время и изменил данные JSON в следующем формате: { "myClasss": { "type": "myClass", "id": "1", "param1": "1", "param2": "2", "param3": "3", "param4": "4" } } //MyClasss is supposed to be plural of the myClass 21.09.2015
  • Новые материалы

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

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

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

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

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

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

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