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

时间:2018-01-15 23:38:42

标签: c# url parameter-passing actionresult

所以我有一个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

我该怎么做?

编辑:路线在Global.asax

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

1 个答案:

答案 0 :(得分:0)

在阅读完这个问题之后: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);
    }
}