更改操作参数但保持 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);
}
}
所以我有一个 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);
}
}