Эта конечная точка API предназначена для получения сериализованного объекта JSON и передачи его базовой системе отчетов.
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
namespace Server.Controllers
{
[ApiController]
[Route("[controller]")]
public class ReportingController : ControllerBase
{
[HttpPost("generate")]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[Consumes("application/json")]
public async Task Generate([FromBody] string reportModel)
{
try
{
dynamic data = JObject.Parse(reportModel);
string templateName = data.TemplateName;
return Ok(templateName);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
}
}
У меня возникли проблемы с его использованием. Как передать строковый объект JSON?
Как, например:
{ "TemplateName": "myTemplate" }
Рассмотрел это в модульном тесте. Уже узнал, что он должен начинаться и заканчиваться двойной кавычкой (").
В приведенном ниже коде метод JsonStringToStringContent необходимо настроить так, чтобы двойные кавычки внутри JSON также получите правильные escape-последовательности.
В настоящее время контроллер даже не задействован, ASP.NET Core уже заранее возвращает код состояния 400.
Я также не уверен насчет типа носителя application/json.
Большое спасибо за помощь!
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.Configuration;
using System.Text;
namespace TestProject
{
public class UnitTest1(TestServerFixture fixture) : IClassFixture
{
[Fact]
public async Task Test1()
{
var json = "{\"TemplateName\":\"myTemplate\"}";
var jsonStringContent = JsonStringToStringContent(json);
using var content = new StringContent(jsonStringContent, Encoding.UTF8, "application/json");
var server = fixture.Server;
var request = server
.CreateRequest("/Reporting/generate")
.And(req => req.Content = content);
var response = await request.PostAsync();
response.EnsureSuccessStatusCode();
}
private string JsonStringToStringContent(string json)
{
// current result: "{"TemplateName":"myTemplate"}"
// expected result: ?
return $"\"{json}\"";
}
}
public sealed class TestServerFixture : WebApplicationFactory
{
private HttpClient client;
public HttpClient Client
{
get
{
client ??= Server.CreateClient();
return client;
}
}
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
FileInfo fileInfo = new(Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json"));
var configurationBuilder = new ConfigurationBuilder();
var configuration = configurationBuilder.Build();
builder
.UseConfiguration(configuration)
.ConfigureAppConfiguration(builder =>
{
builder.AddJsonFile(fileInfo.FullName);
});
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... controller
Как передать сериализованную полезную нагрузку JSON в контроллер веб-API ASP.NET Core ⇐ C#
Место общения программистов C#
1719582558
Anonymous
Эта конечная точка API предназначена для получения сериализованного объекта JSON и передачи его базовой системе отчетов.
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
namespace Server.Controllers
{
[ApiController]
[Route("[controller]")]
public class ReportingController : ControllerBase
{
[HttpPost("generate")]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[Consumes("application/json")]
public async Task Generate([FromBody] string reportModel)
{
try
{
dynamic data = JObject.Parse(reportModel);
string templateName = data.TemplateName;
return Ok(templateName);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
}
}
У меня возникли проблемы с его использованием. Как передать строковый объект JSON?
Как, например:
{ "TemplateName": "myTemplate" }
Рассмотрел это в модульном тесте. Уже узнал, что он должен начинаться и заканчиваться двойной кавычкой (").
В приведенном ниже коде метод JsonStringToStringContent необходимо настроить так, чтобы двойные кавычки внутри JSON также получите правильные escape-последовательности.
В настоящее время контроллер даже не задействован, ASP.NET Core уже заранее возвращает код состояния 400.
Я также не уверен насчет типа носителя application/json.
Большое спасибо за помощь!
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.Configuration;
using System.Text;
namespace TestProject
{
public class UnitTest1(TestServerFixture fixture) : IClassFixture
{
[Fact]
public async Task Test1()
{
var json = "{\"TemplateName\":\"myTemplate\"}";
var jsonStringContent = JsonStringToStringContent(json);
using var content = new StringContent(jsonStringContent, Encoding.UTF8, "application/json");
var server = fixture.Server;
var request = server
.CreateRequest("/Reporting/generate")
.And(req => req.Content = content);
var response = await request.PostAsync();
response.EnsureSuccessStatusCode();
}
private string JsonStringToStringContent(string json)
{
// current result: "{"TemplateName":"myTemplate"}"
// expected result: ?
return $"\"{json}\"";
}
}
public sealed class TestServerFixture : WebApplicationFactory
{
private HttpClient client;
public HttpClient Client
{
get
{
client ??= Server.CreateClient();
return client;
}
}
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
FileInfo fileInfo = new(Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json"));
var configurationBuilder = new ConfigurationBuilder();
var configuration = configurationBuilder.Build();
builder
.UseConfiguration(configuration)
.ConfigureAppConfiguration(builder =>
{
builder.AddJsonFile(fileInfo.FullName);
});
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78682796/how-to-pass-a-serialized-json-payload-to-an-asp-net-core-web-api-controller[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия