将JSON对象发布到asp.net服务器

时间:2014-05-06 19:02:54

标签: c# jquery asp.net ajax json

我正在尝试将一些json数据发布到我的localhost上的asp.netserver。接收代码的页面应该是母版页,但是我试过并得到了#34;错误403:禁止"所以我尝试了一个Web服务,现在我有一大堆其他问题。我的主要问题是我可以在PHP中简单地完成这项工作,但我不知道如何在ASP.NET中进行此操作。

这是我的js文件:

// Get User Login Credentials
function authenticate() {
    $(document).ready(function () {
        var user = $('.login-box form #txtLoginUsername').val().trim();
        var pass = $('.login-box form #txtLoginPass').val().trim();

        // alert(user + " : " + pass);

        $.ajax({
            type: "POST",
            url: "postback.asmx/Verify",
            data: {
                user: user,
                pass: pass
            },
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function() {
                if (response)
                {
                    alert('Works');
                }
                else {
                    $(".ui-widget").slideDown(1000, function () {});
                }
            }
        });
    });
}

现在我在按钮点击事件上调用此函数,我不添加我的服务器代码,因为它包含我从网络中拾取的几行代码,并尝试混搭以使我的页面工作,它没有& #39;吨。我想知道从帖子中获取JSON对象并从我的服务器返回值/数组的简单适当方法。

我不希望使用任何asp.net服务器控件出于某些原因我无法透露,但我已被限制使用此类控件。

3 个答案:

答案 0 :(得分:5)

您无法将WebMethod放在masterPage中。 Ajax是客户端,如果您尝试在浏览器中访问site.master,则会收到相同的错误。

“说明:您所请求的页面类型未被提供,因为它已被明确禁止。扩展名”.master“可能不正确。请查看下面的网址,并确保拼写正确。”

您可以在其他文件.aspx中实现WebMethod,并通过ajax调用。

我写了一个小例子。

CS

[WebMethod(enableSession: true)]
public static void Verify(string user, String pass)
{

    throw new Exception("I´m here");

}

JS

function authenticate() {
            $(document).ready(function () {
                var user = $('#txtLoginUsername').val().trim();
                var pass = $('#txtLoginPass').val().trim();

                // alert(user + " : " + pass);
                var data = {};
                data.user = user;

                $.ajax({
                    type: "POST",
                    url: "default.aspx/Verify",
                    data: JSON.stringify({
                        user: user,
                        pass: pass
                    }),
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function () {
                        if (response) {
                            alert('Works');
                        }
                        else {
                            $(".ui-widget").slideDown(1000, function () { });
                        }
                    }
                });
            });
        }

注意Json如何传递数据

data: JSON.stringify({
                            user: user,
                            pass: pass
                        }),

要调用webservice,请尝试以这种方式传递json。

当您调用Web服务时,浏览器的控制台中会出现相同的错误消息吗?

我认为这会对你有帮助。

答案 1 :(得分:0)

您可以使用JSON.stringify()方法,如下所述 var jsonData =你的Jason数据; 数据:JSON.stringify(jsonData)

courtsey: http://www.dotnetlines.com/forum/tabid/86/forumid/6/postid/72/scope/posts/Default.aspx#72

答案 2 :(得分:0)

你可以这样做。

[WebMethod]
public string Verify(string user,string pass)
{
  //DataTable dt = YourMethod_ReturningDataTable(); 
  //retrun dt.toJson();
  //But in your case 
  bool IsAllowedtoLogin = true;
  return IsAllowedtoLogin.toJson(); 
}

对于这个(toJson)方法,你创建了一个静态类。这会将数据表转换为json格式。

public static string toJson(this DataTable dataTable)
{

    string[] StrDc = new string[dataTable.Columns.Count];

    string HeadStr = string.Empty;
    for (int i = 0; i < dataTable.Columns.Count; i++)
    {

        StrDc[i] = dataTable.Columns[i].Caption;
        HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";

    }

    HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);
    StringBuilder Sb = new StringBuilder();

    Sb.Append("{\"" + dataTable.TableName + "\" : [");
    for (int i = 0; i < dataTable.Rows.Count; i++)
    {

        string TempStr = HeadStr;

        Sb.Append("{");
        for (int j = 0; j < dataTable.Columns.Count; j++)
        {

            TempStr = TempStr.Replace(dataTable.Columns[j] + j.ToString() + "¾", dataTable.Rows[i][j].ToString());

        }
        Sb.Append(TempStr + "},");

    }
    Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));

    Sb.Append("]}");
    return Sb.ToString();

}

请注意,数据参数区分大小写。即用户,通过。

$.ajax({
                type: "POST",
                url: "default.aspx/Verify",
                data: "{'user':'"+yourvariable+"','pass':'"+yourvariable+"'}",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    data = JSON && JSON.parse(data.d) || $.parseJSON(data.d); 
                    if (data == "true") {
                        alert('Works');
                    }
                    else {
                        $(".ui-widget").slideDown(1000, function () { });
                    }
                }
            });