所以我有一个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" }
);
答案 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);
}
}