更改操作参数但保持 URL 相同

Change Action Parameter but keep URL same

所以我有一个 C# .NET 项目。
在某些页面上,我需要更改通过 ActionResult 传递的参数,但仍保留原始 URL.

为了把参数改成我需要的,我通过ActionContext改了变量。但这随后将 URL 更改为参数 - 这是预期但不需要的。

public class CustomController : Controller {
    protected override void OnActionExecuting(ActionExecutingContext filterContext) {
        if (isReplaceType) {
            // replace action parameter to needed one
            filterContext.ActionParameters["variable1"] = replacedVariable;

            // Fake URL code here ??? ----------------
        }
        base.OnActionExecuting(filterContext);
    }
}

我需要在用户浏览器中将 site.com/replacedVariable 更改为 site.com/originalVariable URL吧.

我该怎么做?


编辑:Global.asax

中的路线看起来像这样
routes.MapRoute(
    name: "HomeDefault",
    url: "{variable1}/{action}",
    defaults: new { controller = "home", action = "index" },
    namespaces: new string[] { "Project.Controllers" }
);

读完这个问题后:Change URL After Action is Hit MVC? 它表明更改 URL 的唯一方法是 重定向页面 - 这意味着更改操作变量并不是 URL 更改为新的原因变量。

我发现页面在某些情况下会重定向,这就是它发生变化的原因。因此,为了修复它,我覆盖了 Redirect 函数并将新变量替换为 URL.

中的旧值
public class CustomController : Controller {
    protected override RedirectResult Redirect(string url) {
        if (Session["replacedVariable"] == null) {
            return base.Redirect(url);
        }

        string replaceUrl = url.Replace("/" + Session["replacedVariable"], "/originalVariable");
        return base.Redirect(replaceUrl);
    }
}