通过AJAX将JSON数据发布到Web API失败,并显示“无法将JSON值转换为System.Int32”

时间:2019-12-05 18:15:49

标签: c# jquery json ajax asp.net-web-api

我想将数据从我的网站发送到我的合作伙伴正在通过AJAX进行工作的WEB API。 WEB API是.net Core 3.0应用程序。表单是注册新用户。

但是我在解析输入字段之一的输入数据时遇到了问题。

我的JQuery脚本如下:

<script type="text/javascript">
$(document).ready(function () {
    $("#postform").submit(function (e) {
        e.preventDefault();
        var apiurl = "https://luna.example.com:44350/login/register";

        var data = {
            Name: $("#fullName").val(),
            CPRNumber: $("#cprNumber").val(),
            Email: $("#Email").val(),
            Password: $("#PasswordValidated").val(),
            ZipCode: $("#zipCode").val(),
        }
        $.ajax({
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            type: 'POST',
            url: apiurl,
            data: JSON.stringify(data),
            dataType: 'json',

            success: function (d) {
                alert("Saved Successfully");
                document.getElementById("postform").reset();
            },
            error: function (request) {
                alert("Error please try again");
                alert(request.responseText);
            }
        });
    });
});

表单代码如下:

<form id="postform">
                <div class="form-group">
                    <label for="fullName">Name</label>
                    <input type="name" class="form-control" id="fullName">
                    <small>Geben Sie Ihren ganzen Namen ein (Vor + Nachname)</small>
                </div>
                <div class="form-group">
                    <label for="cprNumber">CPR Nummer</label>
                    <input type="text" class="form-control" id="cprNumber">
                    <small>Geben Sie Ihre Dänische CPR Nummer ein</small>
                </div>
                <div class="form-group">
                    <label for="zipCode">Postleitzahl</label>
                    <input type="number" class="form-control" id="zipCode">
                    <small>Geben Sie Ihre Postleitzahl ein</small>
                </div>
                <div class="form-group">
                    <label for="Email">Email addresse</label>
                    <input type="email" class="form-control" id="Email" aria-describedby="emailHelp">
                    <small id="emailHelp" class="form-text text-muted">Deine Email wird nicht mit anderen geteilt</small>
                </div>
                <div class="form-group">
                    <label for="Password1">Passwort </label>
                    <input type="password" class="form-control" id="Password1">
                    <small>(minimum 8 Zeichen)</small>
                </div>
                <div class="form-group">
                    <label for="RepeatPassword">Passwort erneut eingeben (Bestätigen)</label>
                    <input type="password" class="form-control" id="RepeatPassword">
                </div>


                <button type="submit" class="btn btn-primary">Registrierung abschließen</button>
            </form>

如果我现在点击“提交”按钮,我将从WebAPI收到以下消息:

  

错误“:{” $。ZipCode“:[”无法将JSON值转换为System.Int32。路径:$。ZipCode

对邮政编码进行硬编码将成功,并且数据将存储在数据库中

{
            Name: $("#fullName").val(),
            CPRNumber: $("#cprNumber").val(),
            Email: $("#Email").val(),
            Password: $("#PasswordValidated").val(),
            ZipCode: 6400,
        }

尝试使用

ZipCode: $("#zipCode").val().parseInt

将阻止该错误消息,但是现在该值应被取消固定,这就是服务器将作为新错误消息返回的内容。值未定义(如预期)和外键不匹配(可忽略,因为值未定义)

“数据”的输出(不包含json.stringify):

console.log(data);
prints:
{Name: "", CPRNumber: "", Email: "", Password: "", ZipCode: "6400"}

使用json.stringify输出数据:

alert(JSON.stringify(data));
{"Name":"","CPRNumber":"","Email":"","Password":"","ZipCode":"6400"}

没有json.stringify我得到以下错误消息:

  

{“类型”:“ https://tools.ietf.org/html/rfc7231#section-6.5.1”,“标题”:“发生一个或多个验证错误。”,“状态”:400,“ traceId”:“ | eb442172-4475b7c4c9eb631c。”,“错误“:{” $“:[”'N'是一个无效的值开头。路径:$ | LineNumber:0 | BytePositionInLine:0。“]}}

我非常确定这是因为没有json.stringify的引号中缺少了“”引号。但是手动添加引号会导致相同的错误。

是否有解决此问题的聪明方法?因为对值进行硬编码似乎可以正常工作,但是从输入字段获取值失败。我想这是因为添加了“”引号。

1 个答案:

答案 0 :(得分:0)

请使用 parseInt ($(“#zipCode”)。val())转换为整数。

OR

将表单的zipCode输入元素类型从文本(<input type='number' name='zipcode' id='zipcode'>)修改为数字