Können Sie leere Elemente aus der Eingabe-XML entfernen, indem Sie den MvcBuilder konfigurieren?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Können Sie leere Elemente aus der Eingabe-XML entfernen, indem Sie den MvcBuilder konfigurieren?

Post by Anonymous »

Ich habe eine ASP.NET Core 9.0-Web-API mit einer POST-Methode, die XML akzeptiert. Der Beitrag wird als deserialisiertes Objekt an meinen Controller übergeben. Allerdings verursachen alle leeren Elemente im geposteten XML-Inhalt ein Problem bei der Deserialisierung. Wenn ich mit XDocument-Methoden deserialisiere, kann ich Leerzeichen entfernen, die zu Deserialisierungsausnahmen führen. Ich habe jedoch Probleme beim Zugriff auf einen Konfigurationsaufruf im MvcBuilder, der denselben Schritt ausführen würde.
Ist es möglich, den von AddControllers() zurückgegebenen MvcBuilder so zu konfigurieren, dass Leerzeichen entfernt werden?
Hier ist meine program.cs:

Code: Select all

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();
Hier ist mein Controller:

Code: Select all

[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);
}
}
Hier ist mein Modell (ein repräsentatives Modell, das das Problem reproduziert.)

Code: Select all

 [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; }
}
}

Die XML-Zeichenfolge, die ich veröffentliche, lautet

Code: Select all





Der Fehler wird direkt an meinen XML-Client zurückgesendet und von Microsoft.AspNetCore nicht protokolliert: „Der Remote-Server hat einen Fehler zurückgegeben: (400) Bad Request.“ Obwohl es tatsächlich eine schlechte Anfrage ist, handelt es sich um eine Schnittstelle mit einem Legacy-System, für die ich eine erhöhte Fehlertoleranz benötige.
Wenn ich durch ersetze, erhalte ich eine TestResponse zurück, die angibt, dass die API normal funktioniert.
Ich frage mich auch, ob ich den Controller einem Unit-Test unterziehen soll. Es wird nicht kompiliert, wenn ich versuche, eine XML-Zeichenfolge in PlatformService() aus der Unit-Test-Methode zu übergeben. Gibt es eine Möglichkeit, die Deserialisierung des RequestModel-Objekts zu testen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post