将令牌与 AJAX 和 ASHX 处理程序一起使用时出现 ParseError



>我只是尝试使用我在处理程序上生成的令牌并返回到客户端进行身份验证。(用途:使用令牌对所有请求进行身份验证,第一个身份验证步骤除外)

我测试过并且客户端确实获得了令牌,但是在尝试涉及按令牌进行身份验证的方法时,给出了"解析器错误"状态和"意外令牌 T"语法错误的描述错误。

生成运行良好的令牌的代码

        byte[] time = BitConverter.GetBytes(DateTime.Now.ToBinary());
        byte[] key = Guid.NewGuid().ToByteArray();
        string _token = Convert.ToBase64String(time.Concat(key).ToArray());

用于发送测试请求请求的 AJAX 代码

function test() {
        var jsonParam = { token: _token , type: "check" }
        $.ajax({
            url: "Test.ashx",
            type: "post",
            data: JSON.stringify(jsonParam),
            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            async: false,
            success: function (response) {
                document.getElementById('eCode').innerHTML = response.eCode;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(XMLHttpRequest.responeText + "rnStatus: " + textStatus + "rn" + "Error: " + errorThrown);
            }
        });
    }

用于响应此 AJAX 请求的服务器代码

if (postType == "check")
    {
        // (dict is the deserialized received JSON, a dictionary of [string, object]
        string _token = dict["token"] as string;
        byte[] data = Convert.FromBase64String(_token);
        DateTime when = DateTime.FromBinary(BitConverter.ToInt64(data, 0));
        if (when < DateTime.Now.AddHours(-12))
        {
            // Too old
            context.Response.Write(new Code { eCode = "old" });
        }
        else if (when > DateTime.Now.AddHours(1))
        {
            // Impossible
            context.Response.Write(new Code { eCode = "impossible" });
        }
        else
        {
            // Good
            context.Response.Write(new Code { eCode = "Time: " + when.ToString("dd/MM/yyyy") });
        }

    }

并收到以下错误:解析器错误,"意外令牌 T"的语法错误。此错误出现在客户端警报中找不到有完全相同问题的人。

泛型处理程序返回的 JSON 格式不正确,甚至不是 JSON。您可以通过将 dataType 属性设置为 text 来检查处理程序的输出吗?像这样: dataType: "text"

最新更新