从 apsx 到代码隐藏的 Ajax 调用导致 500 错误 - 引用策略:.net 中的 strict-origin-when-cross-origin

问题描述 投票:0回答:1

我想在代码后面设置一个会话变量,以便在收到基于设置会话变量的结果的ajax调用结果后。

这个应用程序是旧的 Webform,不是 MVC 这是我所做的 下面是我的 Test.aspx

<asp:Button ID="cmdTest" runat="server" Text="Set session value"          
 OnClientClick="mytest();return false"/>

<Script>
    function myTest() {
        console.log("Document is ready.");
        $.ajax({
            type: "POST",
            url: "CheckBrowser.aspx/SetSessionVariable",
            data: JSON.stringify({ value: 'true' }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                // Handle the server's response (if needed)
                console.log("success");
            },
            error: function (error) {
                console.log("AJAX Error: " + error);
            }
        });
    }
</script>

这是我的 Test.aspx.cs 代码

[WebMethod(enableSession: true)]
public static void SetSessionVariable(string value)
{
    HttpContext.Current.Session["myTest"] = value;
    Debug.Print("session value set");
}

但是我得到请求 URL: localhost:44310/Support/Test.aspx/SetSessionVariable 请求方法: POST 状态代码: 500 远程地址: [::1]:44310 引用策略: strict-origin-when-cross-origin 参见网络流量下图 这很奇怪,因为我的起源是相同的,我只是从我的 aspx 页面执行 ajax 调用以在后面的相同 aspx 代码中设置变量。我不确定我错过了什么任何帮助将不胜感激。

c# asp.net ajax cross-site
1个回答
0
投票

我建议您发布更多标记。

那么,让我们创建一个示例网页。我们将其命名为 CheckBrowser.aspx。

我们的标记现在是这样的:

<form id="form1" runat="server">

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js">
    </script>

    <div>
        <input id="Button1" type="button" value="Set session value"
            onclick="SetValue();return false;" />
        <br />

        <input id="Button2" type="button" value="get session value"
            onclick="GetValue();return false;" />

        <script>
            function SetValue() {
                $.ajax({
                    type: "POST",
                    url: "CheckBrowser.aspx/SetSessionVariable",
                    data: JSON.stringify({ value: 'Hello World' }),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        // Handle the server's response (if needed)
                        console.log("success");
                        alert("Session value set")
                    },
                    error: function (error) {
                        console.log("AJAX Error: " + error);
                    }
                });
            }

            function GetValue() {
                $.ajax({
                    type: "POST",
                    url: "CheckBrowser.aspx/GetSessionVariable",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        // Handle the server's response (if needed)
                        alert("Session value from server = " + response.d)
                        console.log("success");
                    },
                    error: function (error) {
                        console.log("AJAX Error: " + error);
                    }
                });
            }


        </script>

    </div>
</form>

因此,请注意我们如何包含 jQuery 库。 (必填)。

所以,当我们运行上面的代码时,我们得到/看到这个:

所以,使用发布的代码,上面的工作就很好了。

这意味着您提供的信息不足以确定为什么上述代码可以工作,而您的代码却不能。

如前所述,我会尝试按 f12 打开浏览器工具,选择控制台,然后查看浏览器开发人员模式显示的内容。

请注意,考虑创建一个新的测试浏览器页面,更改 ajax post 示例中使用的 URL,看看是否有效。

换句话说,我们读者和这里的人无法重现您的错误。因此,您必须提供更多的页面标记,因为上面的示例工作得很好。

对于此测试,我还建议使用 HTML 按钮,而不是 asp.net 按钮,因为 JavaScript 代码中的任何错误在大多数情况下都会导致页面回发,这会隐藏您查看错误消息的能力。使用上面的 HTML 按钮并返回 false 不会导致页面回发,这应该允许您在任何 JavaScript 代码中看到错误。

© www.soinside.com 2019 - 2024. All rights reserved.