DNN:HttpContext.Current.Session 不工作

DNN: HttpContext.Current.Session not Working

我不是 .NET 编程方面的专家,我正在尝试解决这个问题但没有成功。

我们决定改造我们的旧网站,其中一部分是切换主题。但是我们有一个旧的功能,我们不能移动到新的主题。

我们的旧网站具有获取用户会话代码的功能,因此如果他们通过 url 转到我们的附属网站,他们将自动登录。

这是我们旧主题的代码...

旧主题代码

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="/Home.ascx.cs" Inherits="Mandeeps.DNN.Skins.Tucson.Tucson" %>
<%@ Register TagPrefix="dnn" Namespace="DotNetNuke.Web.Client.ClientResourceManagement" Assembly="DotNetNuke.Web.Client" %>
<script type="text/javascript">
var onetimeurl = "<%#HttpContext.Current.Session["OneTimeURL"]%>";
$(document).ready(function() {
    $('.financials_link').attr("href", "https://sub.domain.com?authToken=" + onetimeurl);
    $('.financials_link').attr("target", "_blank");
    var service = $.ServicesFramework(-1);
    $.ajax({
        type: "GET",
        url: service.getServiceRoot("WebAuthModule") + "webauth/getauthtoken",
        beforeSend: service.setModuleHeaders,
        dataType: "json"
    }).done(function(a) {
        a && $(".financials_link").attr("href", "https://sub.domain.com?authToken=" + a)
    });
});
</script>

效果很好。但是当将代码移动到新主题时,代码没有显示并且它破坏了页面的布局。我收到了这个错误。

Line 20: Error BC30516: Overload resolution failed because no accessible 'ToString' accepts this number of arguments.

新主题代码

<%@ Control Language="vb" AutoEventWireup="false" Explicit="True" Inherits="DotNetNuke.UI.Skins.Skin" %>
<script type="text/javascript">
 var onetimeurl = "<%#HttpContext.Current.Session["OneTimeURL"]%>"; <!--LINE 20-->
$(document).ready(function() {
    $('.financials_link').attr("href", "https://sub.domain.com?authToken=" + onetimeurl);
    $('.financials_link').attr("target", "_blank");
    var service = $.ServicesFramework(-1);
    $.ajax({
        type: "GET",
        url: service.getServiceRoot("WebAuthModule") + "webauth/getauthtoken",
        beforeSend: service.setModuleHeaders,
        dataType: "json"
    }).done(function(a) {
        a && $(".financials_link").attr("href", "https://sub.domain.com?authToken=" + a)
    });
});
</script>

注意到第一行,我添加了控制代码,因为这是我认为彼此唯一不同的地方。其他的都差不多。

到目前为止我所做的是反编译 Home.ascx (.dll) 并寻找 OneTimeURL,但我没能找到它。

我希望你们能发现问题,这样我就可以解决这个问题。

我觉得很奇怪,你说旧的是 C# 而新的是 VB??

但是鉴于我在上面看到的,试试这个,只需将方括号更改为括号,所以新的第 20 行是:

var onetimeurl = "<%#HttpContext.Current.Session("OneTimeURL") %>";

如果还是不行,那就在底部添加这个功能试试

<script runat="server">
Public Function GetSession() As String
  Return HttpContext.Current.Session("OneTimeURL")
End Function
</script>

然后第 20 行需要是:

var onetimeurl = "<%#GetSession() %>";