I am trying to add anything in the query of the request to anchors in the html result:
Fictitious example:
User makes a request (note that band and song coul
There doesn't seem to be any official way to do this yet.
If the @Context.GetRouteData().Values
works you should use it instead. The idea behind it is, that GetRouteData
gets the current route information from the routing middleware as key value pairs (Dictionary) which should also contain query parameters.
I am not sure if it works in your case and if asp-route-band
& asp-route-song
are hard-coded or taken from route in your case.
In case that may not work, you could try the following extension method & class:
public static class QueryParamsExtensions
{
public static QueryParameters GetQueryParameters(this HttpContext context)
{
var dictionary = context.Request.Query.ToDictionary(d => d.Key, d => d.Value.ToString());
return new QueryParameters(dictionary);
}
}
public class QueryParameters : Dictionary<string, string>
{
public QueryParameters() : base() { }
public QueryParameters(int capacity) : base(capacity) { }
public QueryParameters(IDictionary<string, string> dictionary) : base(dictionary) { }
public QueryParameters WithRoute(string routeParam, string routeValue)
{
this[routeParam] = routeValue;
return this;
}
}
It basically abstracts your code from above behind a extension method and returns a QueryParameters
type (which is an extended Dictionary<string,string>
) with a single additional method for pure convenience, so you can chain multiple .WithRoute
calls, since Add
method of dictionary has a void
return type.
You'd be calling it from your View like this
<a asp-controller="topic"
asp-action="topic"
asp-all-route-data="@Context.GetQueryParameters().WithRoute("band", "iron-maiden").WithRoute("song", "run-to-the-hills");"
>
Iron Maiden - Run to the hills
</a>