在 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) 方法不附加“#”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Angular POST 到 C# Asp.Net MVC 控制器?

无法让 ASP.NET MVC 6 控制器返回 JSON

在 ASP.NET MVC 框架中验证已发布的表单数据

如何在 asp.net-mvc 控制器中集中授权逻辑?

ASP/NET MVC:带会话的测试控制器?嘲讽?

如何在 ASP.Net MVC 中模拟控制器上的请求?