Wenn ich UrlHelper.Link innerhalb eines API-Aufrufs aufrufen, der einen Parameter hat, der einem optionalen Parameter des API-Endpunkts entspricht, für den ich versuche, eine URL zu erhalten, gibt UrlHelper.Link eine URL mit Werten aus die aktuelle Anfrage, egal wie ich den optionalen Parameter aus dem Link ausschließe.UrlHelper.Link gibt unerwünschte Parameter zurück
z.B.
[HttpGet]
[Route("api/Test/Stuff/{id}")]
public async Task<IHttpActionResult> GetStuff(int id) // id = 78
{
string link = Url.Link("Mary", new
{
first = "Hello",
second = "World"
});
string link2 = Url.Link("Mary", new
{
first = "Hello",
second = "World",
id = (int?)null
});
string link3 = Url.Link("Mary", new
{
first = "Hello",
second = "World",
id = ""
});
return Ok(new
{
link,
link2,
link3
});
}
[HttpGet]
[Route("api/Test/Another/{first}", Name = "Mary")]
public async Task<IHttpActionResult> AnotherMethod(
[FromUri]string first,
[FromUri]string second = null,
[FromUri]int? id = null)
{
// Stuff
return Ok();
}
GET http://localhost:53172/api/Test/Stuff/8
kehrt
{
"link": "http://localhost:53172/api/Test/Another/Hello?second=World",
"link2": "http://localhost:53172/api/Test/Another/Hello?second=World&id=8",
"link3": "http://localhost:53172/api/Test/Another/Hello?second=World&id=8"
}
Wie bekommt man Url.Link, um tatsächlich die Werte verwenden Sie es passieren, anstatt es aus dem aktuellen api Anfrage zu ziehen, wenn sie nicht dargestellt werden oder einer Null oder einer leeren Zeichenfolge zugewiesen?
Ich glaube, die Frage ist sehr ähnlich zu ....
UrlHelper.Action includes undesired additional parameters
Aber das ist Web-API nicht MVC, keine Aktion und die Antworten zur Verfügung gestellt scheinen keine offensichtliche Lösung dieses Problems zu erhalten Problem.
EDIT: Ich habe den Code aktualisiert, da der ursprüngliche Code das Problem tatsächlich nicht repliziert hat. Ich habe auch eine Anfrage-URL hinzugefügt und die Antwort zurückgegeben, die ich getestet habe. Während dieser Code das Problem veranschaulicht, übergibt der Code, für den ich eine Fehlerbehebung suche, keinen anonymen Typ an UrlHelper, sondern eine Klasse, die einen Zeitstempel und einen Hash generiert und vier optionale Parameter besitzt. Wenn es eine andere Lösung gibt, die nicht die optionalen Parameter in der Struktur auslassen muss, die an UrlHelper übergeben wird, würde ich es gerne haben, da es mich davor bewahren würde, viele Änderungen am Code vorzunehmen.
Zeigen Sie auch die ursprüngliche URL und die generierte URL an. – Nkosi
Ich würde vorschlagen, die Antwort ist eher eine Arbeit um.Es ist etwas, von dem ich denke, dass es eine Menge Leute erwischen wird, die irrtümlich glauben, dass das Zuweisen eines leeren oder Null-Werts an eine beliebige Struktur (einschließlich anonymer oder Klassentyp), die an UrlHelper übergeben wird, dasselbe wäre wie das Weglassen des Wertes. Während das Verhalten tatsächlich von Entwurf sein könnte, denke ich, es ist sehr schlecht konzipiert und nicht das, was Sie erwarten würden – Mick