我如何解析使用ajax(POST)发送给jonvolueCollection类的json?

时间:2013-10-18 19:53:26

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

霍洛:

我将以下消息发送到mi asp.net web api

var user ={
            Username: "user",
            Password: "pass"

        };
        $.ajax({
            url: 'http://WebApiDir',
            type: 'POST',
            contentType: "application/json",
            data: JSON.stringify(user),
            success: function (data) {

            },
        });

我在DelegatingHandler上捕获了请求。 我的问题是如何将HttpContent中包含的消息解析为NameValueCollection类

我尝试执行以下操作

var sQuery = await request.Content.ReadAsFormDataAsync().Result;

但由于Result attr为null,这会产生异常。

感谢您的回答

2 个答案:

答案 0 :(得分:0)

这是我做的事情: -

  $.ajax
                        ({
                            url: 'Default.aspx/MyMethod',
                            type: 'POST',
                            dataType: "json",
                            contentType: 'application/json; charset=utf-8',
                            data: JSON.stringify({ ID: ID }),
                            success: onSuccess,
                            fail: onFail
                        });

然后在C#方面: -

[WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        // MyMethod is used to pass Identifcation number from client side to server side via Ajax.
        public static string MyMethod(string ID)
        {
              ........ do whatever needs to be done ........

              return string.Format("Thanks for calling me with Ajax, the ID: " + data);
        }

答案 1 :(得分:0)

如果您确实在使用WebAPI,则应该允许框架为您做繁重的工作。

首先,您需要确保路由设置正确,并且您实际上正在通过javascript调用路由。在您的情况下,App_Start / WebApiConfig.cs看起来像:

public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

然后,为您的api控制器提供一个有意义的名称,例如Users,并将该方法定义为帖子,因为您要发布用户信息,将用户作为参数

public class User
{
    public string Username { get; set; }
    public string Password { get; set; }
}

public string Post(User user)
{
    // perform actions on user data
    return "success";
}

最后,您需要在javascript调用中正确定义路线。

var user ={
    Username: "user",
    Password: "pass"
};

$.ajax({
    url: 'http://WebApiDir.com/api/Users',
    type: 'POST',
    contentType: "application/json",
    data: user,
    success: function (data){},
});
相关问题