【问题标题】:How I can parse a json sended using ajax (POST) to NameValueCollection Class?如何解析使用 ajax (POST) 发送到 NameValueCollection 类的 json?
【发布时间】:2013-10-18 19:53:26
【问题描述】:

喂:

我正在向 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 为空。

感谢您的回答

【问题讨论】:

  • 您是否有理由不允许 WebAPI 路由将您的数据反序列化为参数?

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


【解决方案1】:

这是我做的事情:-

  $.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);
        }

【讨论】:

【解决方案2】:

如果您确实在使用 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 并将该方法定义为帖子,因为您正在发布用户信息,并将 User 作为参数

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){},
});

【讨论】:

  • 我对它调用的方法没有问题。我遇到的问题是我无法捕获处理程序中的内容
  • 你的处理程序是什么样的?
  • 是这样的:NameValueCollection query = request.Content.ReadAsFormDataAsync().Result;斜体 这会产生一个 NameValueCollection 空
  • 我的问题是,当您可以将请求内容作为 Web api 方法的参数时,为什么还要从请求内容中读取?
  • 因为我有需要在处理程序上捕获的身份验证数据
猜你喜欢
  • 2011-07-23
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多