这是一个令人头疼的问题:

我有一个Dotnet应用程序,该应用程序在某个非活动时间段后将用户注销。使用在相关CSHTML中定义的动作的JavaScript函数会将用户发送到某个控制器方法,该方法会将他们注销。

当JavaScript代码确定应该注销用户时,它使用以下行来执行此操作:

location.href = settings.actions.expireSession + '?returnUrlString=' + currentUrl;


其中settings.actions.expireSession定义为:

expireSession: '@Url.Action("Expire", "Session")'


并且返回URL字符串进入location.href如下所示:

http://localhost:49574/Report/ReportWithUserIdAndCaseId?userId=84&caseId=173


正确,整个字符串与url操作组装在一起如下所示:

"/Session/Expire?returnUrlString=http://localhost:49574/Report/ReportWithUserIdAndCaseId?userId=84&caseId=173"


我在相关方法的入口处设置了一个断点,但是到达名为“ returnUrlString”的字符串参数时,缺少了“ caseId”:

http://localhost:49574/?returnUrl=http%3A%2F%2Flocalhost%3A49574%2FReport%2FReportWithUserIdAndCaseId%3FuserId%3D84


因此,当我输入我的用户名和密码重新登录时,我将重定向到以下URL:

http://localhost:49574/Report/EntrySummaryReportWithPatientIdAndVisitId?userId=84


失败,因为它缺少关键参数。

我是否错过任何明显的事情?在Dotnet的寻址/重定向系统的自动化背景下,还有其他事情可能导致这种神秘的消失吗?

非常感谢大家阅读本文,也非常感谢贡献者!
 -伊利亚

最佳答案

您需要先对Url进行转义,然后再将其发送到Session / Expire页面。

有关使用Javascript进行编码的信息,请参见前面的问题:
Encode URL in JavaScript?

在“会话过期”页面上具有returnUrlString之后,应取消转义并将用户定向到该页面。

问题在于,“会话/过期”页面的网址为:
"/Session/Expire?returnUrlString=http://localhost:49574/Report/ReportWithUserIdAndCaseId?userId=84&caseId=173"

服务器看到的是:
页面:"/Session/Expire?,QueryString ReturnUrlString:returnUrlString=http://localhost:49574/Report/ReportWithUserIdAndCaseId?userId=84,QueryString CaseId:&caseId=173"

它会将您的&caseId解释为/ Session / Expire URL的一部分。这就是为什么它消失了。

关于javascript - 点网返回网址缺失参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28747036/

10-12 00:02