在 ASP.NET MVC 控制器中,如何让 Redirect(string URL) 方法不附加“#”?
Posted
技术标签:
【中文标题】在 ASP.NET MVC 控制器中,如何让 Redirect(string URL) 方法不附加“#”?【英文标题】:In an ASP.NET MVC Controller, how can I get the Redirect(string URL) method to not append a '#'? 【发布时间】:2016-01-14 12:13:45 【问题描述】:我在 ASP.NET MVC 5 项目中有一个控制器,它返回 Redirect(url) 的结果,其中 url 是一个字符串。
基本上我有这个:
string url = "calendar/addevent";
return Redirect(url);
浏览器中的结果是加载这样的 URL:http://example.com/calendar/addevent#
这在 IE 中很好,但 Chrome 会滚动到页面底部以查找锚点,因为 '#'。
知道如何在 URL 末尾不包含“#”吗?
2015 年 10 月 21 日更新
这是从使用单用户身份验证的模板 MVC 5 项目中找到的帐户控制器中的此方法返回的:
private ActionResult RedirectToLocal(string returnUrl)
if (Url.IsLocalUrl(returnUrl))
return Redirect(returnUrl);
return RedirectToAction("Index", "Home");
Url.IsLocalUrl 为真,如果我调试并读取从 Redirect(returnUrl) 返回的对象,则 URL 没有“#”。浏览器仍然以某种方式得到它......
【问题讨论】:
我无法重现这一点,#
字符不在重定向响应的 Location:
标头中。您浏览器的 F12 工具对 Location:
标头有何看法?你有自己附加#
的脚本吗?
你能告诉我们你的代码吗?这不是 MVC 重定向的正常行为。你在用 angularjs 吗?
这发生在新项目中生成的 AccountController 中的 RedirectToLocal 方法中。 '#' 字符在我调试时从不存在,但浏览器总是得到它......
【参考方案1】:
你可以像下面这样使用 Url.Action:
var url = Url.Action("ActionName" ,"ControllerName");
return Redirect(url);
或者
return RedirectToAction("ActionName" ,"ControllerName");
【讨论】:
我所拥有的只是一个发送到登录表单的 URL。【参考方案2】:我发现这是由于 Google 的 OAuth 响应而发生的。他们在响应中的查询字符串以“#”结尾。因此,Account 控制器中的 Redirect 方法返回一个 302 响应,该响应正确地保留了散列。好比喻 -> https://***.com/a/5283528/2354959.
所以 ASP.NET MVC 控制器工作正常...
【讨论】:
【参考方案3】:查看示例控制器 ActionResult
//Parameter can also be FormCollection
public ActionResult eventview(string url)
string[] splitURL=url.split('/'); //Considering URL - "calendar/addevent"
return RedirectToAction(splitURL[1],splitURL[0]);
【讨论】:
你能补充一些细节吗?这不是一个高质量的答案。以上是关于在 ASP.NET MVC 控制器中,如何让 Redirect(string URL) 方法不附加“#”?的主要内容,如果未能解决你的问题,请参考以下文章