如果我有“页面名称”或“路由名称”,还有路由值,那么我可以通过多种方式创建 URL:
return RedirectToPage
return RedirectToRoute
Url.Action
Url.ActionLink
Url.Link
Url.PageLink
Url.RouteUrl
LinkGenerator.GetPathByAction
LinkGenerator.GetPathByName
LinkGenerator.GetPathByPage
LinkGenerator.GetPathByRouteValues
LinkGenerator.GetUriByAction
LinkGenerator.GetUriByName
LinkGenerator.GetUriByPage
LinkGenerator.GetUriByRouteValues
但是假设我已经有一个 URL 路径(例如
/customer/edit
)和路由值(匿名对象或字典,例如 id
等于 1
),那么如何创建 URL?我无法使用 return Redirect(path)
,因为它不支持路线值。
我正在寻找一种
RedirectXXX("/customer/edit", new { id = 1, name = "foo" })
方法(如果存在)。
(是的,我可以自己写,但我假设这样的东西已经存在;是吗?)
解决方法:
public RedirectResult Redirect(string urlPath, Dictionary<string, string?> routeValues)
{
// ...input validation elided
var urlFull = QueryHelpers.AddQueryString(urlPath, routeValues);
return Redirect(urlFull);
}
可以将其放入抽象基类中,例如
PageModelBase
。
我更喜欢内置解决方案,它也可以满足匿名对象(而不是字典)的需求,而无需 JSON(反)序列化黑客。如果有这样的事情,请发布,我会接受你的答案。