Можете ли вы удалить пустые элементы из XML, настроив MvcBuilder?C#

Место общения программистов C#
Ответить
Anonymous
 Можете ли вы удалить пустые элементы из XML, настроив MvcBuilder?

Сообщение Anonymous »

Мой веб-API ASP.NET Core 9.0 с методом POST принимает XML. Сообщение передается в мой контроллер как десериализованный объект, однако пустые элементы в содержимом XML вызывают проблемы с десериализацией. При десериализации с помощью методов XDocument я могу удалить пробелы.
У меня возникли проблемы с доступом к вызову конфигурации в MvcBuilder, хотя при этом выполняется тот же шаг. Можно ли настроить MvcBuilder, возвращаемый AddControllers(), для удаления пробелов?
program.cs:

Код: Выделить всё

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers().AddXmlSerializerFormatters();

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Мой контроллер:

Код: Выделить всё

[Route("[controller]")]
[ApiController]
public class MyPlatformController : ControllerBase
{
//
[HttpPost]
[Produces("application/xml")]
public IActionResult PlatformService(RequestModel request)
{
var responseData = new TestResponse { Foo = 1, Bar = 101 };
//process request
return Ok(responseData);
}
}
Моя модель:

Код: Выделить всё

[DebuggerStepThrough]
[DesignerCategory("code")]
[XmlType(AnonymousType = true)]
[XmlRoot]
[Serializable]
public class RequestModel
{
private int foo;

[DefaultValue(0)]
public int Foo
{
get { return foo; }
set { foo = value; }
}

private int bar;

[DefaultValue(0)]
public int Bar
{
get { return bar; }
set { bar = value; }
}
}
Строка XML: Ошибка отправляется непосредственно моему XML-клиенту и не регистрируется Microsoft.AspNetCore:

Удаленный сервер возвратил ошибку: (400) Неверный запрос.

Хотя это действительно неверный запрос, это интерфейс с устаревшей системой, для которой я нужна отказоустойчивость. Когда я заменяю на , я получаю TestResponse, который указывает, что API работает.
Кроме того, контроллер не будет компилироваться, если я передам строку XML в PlatformService() из метода модульного теста. Как я могу проверить десериализацию объекта RequestModel?

Подробнее здесь: https://stackoverflow.com/questions/797 ... mvcbuilder
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»