Я пытаюсь отправить параметры в конечную точку «Post», но не могу попасть в конечную точку, если подпись не пуста. В противном случае (как в примере ниже) я получаю в консоли ошибку «Неподдерживаемый тип носителя». Я вижу, что параметры передаются, но как мне получить к ним доступ в методе C#? Какую подпись я использую в методе для доступа к этим значениям?
jsx:
axios({
method: 'post',
url: '/cookie',
data: JSON.stringify({ name: 'John', desc: 'Man' }),
dataType: 'json'
});
С#:
[ApiController]
[Route("[controller]")]
public class CookieController : ControllerBase
{
[HttpPost(Name = "")]
public void Post([FromBody] string data)
{
...
}
}
Ну это мой вопрос. Какие параметры я добавляю в подпись метода C# для доступа к параметрам name и desc, которые я отправляю через Axios POST. Доступ к данным тела, как вы выразились.
Вы отправляете его как данные JSON, поэтому в вашем коде C# он будет доступен как строка JSON в переменной данных, вы можете распечатать его, чтобы просмотреть данные. Далее вы можете использовать десериализатор JSON для получения отдельных ключевых данных.
В зависимости от того, какую версию dot net вы используете, это может сработать var jsonObject = JsonNode.Parse(data).AsObject();
Код, который я опубликовал, не достигает конечной точки. Выдает ошибку 415. Единственный способ заставить его достичь конечной точки — это пустая подпись. –





jsx:
axios({
method: 'post',
url: '/cookie',
headers: { 'Content-Type': 'application/json' },
data: JSON.stringify({ name: 'John', desc: 'Man' }),
dataType: 'json'
});
Javascript отправляет данные JSON, а C# ожидает их как DTO, который я назвал «CookieData», чтобы соответствовать маршруту:
С#:
[ApiController]
[Route("[controller]")]
public class CookieController : ControllerBase
{
public class CookieData
{
public string Name { get; set; }
public string Desc { get; set; }
}
[HttpPost(Name = "")]
public void Post([FromBody] CookieData data)
{
Так как бы мне это сделать?
Добавьте класс CookieData в свой проект (в том же пространстве имен) или даже добавьте класс внутри класса контроллера, чтобы начать работу. Затем измените аргумент строки конечных точек публикации на CookieData.
Я все еще получаю ошибку 415: «Неподдерживаемый тип носителя». Он не попадает в метод конечной точки
В jsx URL: '/cookie',, headers: { 'Content-Type': 'application/json' },
Извините, но я только что заметил, что параметры теперь жестко запрограммированы в сообщении. Если бы я хотел получить их из текстового ввода и отправить как объект React, я предположил, что это было бы так: data: JSON.stringify({ name: {name}, desc:{desc}}), но это привело бы к неправильному запросу. .
или даже это: JSON.stringify({post}) Потому что я установил это таким образом... const [post, setPost] = useState({ name: '', desc:'' })
Подожди, Джон, ты превращаешь это в вопрос-хамелеон. Если вам нужна поддержка расширяемого контента JSON, вы можете использовать JObject, но это другая тема.
Какие параметры? Я не вижу никаких параметров в вашем коде, можете ли вы уточнить, в чем именно проблема? это пустая подпись или доступ к данным тела?