所有路由的锚标记助手 - 一种更好的方法

Anchor Tag Helper for All Routes - a better way

我的页面参数太多,无法使用 asp-route-param。但我似乎无法找到一种简单的方法来保留任何现有参数,除了我想为特定 link 更改的参数(想想一个包含各种 link 的页面,钻取 down/up 过滤选项)。

我想出了一个可行的方法,但我想知道是否有更好的方法我还没有找到。

我的方法是获取完整的 URL:

var url = GetDisplayUrl()

然后是一个接受 url 的方法以及您要更改的内容:

    public static string GenerateBetterUrl(string url, string queryParam, string paramValue)
    {
        var uriBuilder = new UriBuilder(url);
        var query = HttpUtility.ParseQueryString(uriBuilder.Query);
        query[queryParam] = paramValue;
        uriBuilder.Query = query.ToString();
        return uriBuilder.ToString();
    }

我有一个不同的版本,它接受用于多重替换(例如日期)的字典。

我错过了什么吗?这似乎是一项正常的任务并且已经融入其中。或者就是这样?

The asp-all-route-data attribute supports the creation of a dictionary of key-value pairs. The key is the parameter name, and the value is the parameter value.

您可以构建并提供整个字典,而不是一个一个地提供路由参数。

此外,您还可以获得用于解析当前路由的所有值的字典。

@{
var ambientValues = HttpContext.Features.Get<IRouteValuesFeature>()?.RouteValues;
}
<a asp-page="..." asp-all-route-data="ambientValues" asp-route-oneValue="something">Link</a>

只需确保将“asp-all-route-data”放在首位即可。