MVC-Attribut-routing mit der Url.Aktion nicht auflösen route
Ich kann nicht @Url.Action
zu beheben, um die url, die ich erwarte, basierend auf dem Attribut route, die ich angewendet habe:
Meine Aktion (SearchController aber mit [RoutePrefix("add")])
[Route("{searchTerm}/page/{page?}", Name = "NamedSearch")]
[Route("~/add")]
public ActionResult Index(string searchTerm = "", int page = 1)
{
...
}
Aufruf-Url.Aktion
@Url.Action("Index", new { controller = "Search", searchTerm = "replaceMe", page = 1 })
Diese Ergebnisse in einer url von
/add?searchTerm=replaceMe&page=1
Ich würde erwarten, dass
/add/replaceMe/page/1
Wenn ich die url manuell ein, dann löst es die richtige Maßnahme mit den richtigen Parametern. Warum nicht @Url.Action
beheben die richtige url?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da haben Sie einen Namen für Ihre schönen route, können Sie die
RouteUrl
Methode.Und da müssen Sie fügen Sie in der url, sollten Sie aktualisieren Sie Ihre route definition zu schließen, dass in der url-Muster.
Routen sind, um sensible. Allerdings sind Attribute nicht. In der Tat, bei der Verwendung von 2
Route
Attribute auf eine einzelne Maßnahme wie dieser können Sie feststellen, dass es funktioniert auf einigen kompiliert und nicht auf andere, denn Reflexion ist keine Garantie für eine Bestellung bei der Analyse von benutzerdefinierten Parametern.Um sicherzustellen, dass Ihre Routen sind eingetragen in der route-Tabelle in der richtigen Reihenfolge, müssen Sie den
Order
- Eigenschaft für jedes Attribut.Nachdem Sie fix die Bestellung problem, die URL löst die Art und Weise, die Sie erwarten.
Zurückkehren vollständige URL verwenden Sie dieses
Hoffe, das jemand hilft.