ASP.NET MVC中href链接跳转被数据库登录中断的解决问询
问题:ASP.NET MVC链接登录后无法跳转到指定地址
我使用ASP.NET MVC开发,代码部署在Index.cshtml视图(后续也会应用到详情视图)。现有一个href链接:用户已登录目标在线数据库时,可正常跳转至指定地址;但用户未登录时,点击链接会跳转至登录页,登录完成后却导向数据库首页,而非链接指定的目标地址。想确认是否有解决办法,还是受我们无法控制的数据库设置影响?
相关代码如下:
@foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.ProjectID) </td> <td> <a href="@string.Format("https://www.xyz.co.uk/#/project/{0}/Index", item.Reference)" target="_blank">Edge </a> </td> .... </tr> }
解决思路
1. 确认目标系统是否支持登录跳转参数
多数身份验证系统支持通过returnUrl(或类似命名的参数)指定登录后的跳转地址,你可以:
- 查询目标数据库系统的文档或联系其技术支持,确认是否支持这类参数传递。
- 如果支持,修改链接构造逻辑,将目标路径编码后作为参数附加到登录页URL中。例如:
注意:必须对<a href="@string.Format("https://www.xyz.co.uk/login?returnUrl=%23%2Fproject%2F{0}%2FIndex", item.Reference)" target="_blank">Edge </a>returnUrl的值做URL编码(比如#转%23、/转%2F),避免参数被截断或解析错误。 - 如果目标系统不支持该参数,那确实是对方系统的设置限制,无法通过前端代码解决。
2. 排查锚点(#)的影响
你的链接包含锚点路径(#/project/{0}/Index),部分系统的登录跳转逻辑会忽略锚点部分,只保留域名和路径。这种情况下:
- 联系目标数据库的技术支持,确认是否支持将锚点作为跳转目标的一部分。
- 若支持,确保
returnUrl参数包含完整的锚点内容且编码正确。
3. 后端中转跳转(备选方案)
如果前端直接传递参数无效,可以在ASP.NET MVC后端创建中转Action:
- 后端Action接收项目Reference参数,生成包含
returnUrl的目标系统完整跳转URL。 - 前端链接指向该后端Action,由后端完成跳转。
示例Controller代码:
public ActionResult RedirectToEdge(string reference) { var targetPath = Uri.EscapeDataString($"#/project/{reference}/Index"); var loginUrl = $"https://www.xyz.co.uk/login?returnUrl={targetPath}"; return Redirect(loginUrl); }
前端链接修改为:
<a href="@Url.Action("RedirectToEdge", "YourController", new { reference = item.Reference })" target="_blank">Edge </a>
内容的提问来源于stack exchange,提问作者Sally Parkes
相关产品推荐
相关产品推荐

