.net 网络客户端上传字符串

.net 网络客户端上传字符串,.net,json,post,webclient,.net,Json,Post,Webclient,我有个问题 在使用Web服务进行后期处理时,我遇到了一个错误 iqws webservis = new iqws(); WebClient wc = new WebClient(); var ser = new JavaScriptSerializer(); var serializedResult = ser.Serialize(webservis.getProducts()); wc.Headers[HttpRequestHeader.ContentT

我有个问题

在使用Web服务进行后期处理时,我遇到了一个错误

    iqws webservis = new iqws();
    WebClient wc = new WebClient();
    var ser = new JavaScriptSerializer();
    var serializedResult = ser.Serialize(webservis.getProducts());
    wc.Headers[HttpRequestHeader.ContentType] = "application/json";
    string result = wc.UploadString("http://localhost:3523/WS/iqws.asmx/getProducts", serializedResult);
    var table = ser.Deserialize<Dictionary<string, dynamic>>(result);
和结果

[
  {
    "name": "iPhone 4s Gold",
    "code": null,
    "money": "1899,0000",
    "images": null,
    "comments": null
  },
  {
    "name": "iPhone 5s Black",
    "code": null,
    "money": "2000,0000",
    "images": null,
    "comments": null
  }
]

为什么会出现错误?

当我质疑您试图用代码实现什么时,最终,您得到
HTTP 500
响应的原因是因为您将数据发布到不接受任何参数的web服务方法

要使用POST调用
getProducts
,需要使用空字符串调用
wc.UploadString(…)

string result = wc.UploadString("http://localhost:3523/WS/iqws.asmx/getProducts", String.Empty);

这将检索产品列表。要上载产品,您需要不同的web服务方法,例如:

public class Product
{
    public String Name { get; set; }
    public String Code { get; set; }
    public String Money { get; set; }
    public String Images { get; set; }
    public String Comments { get; set; }
}

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class iqws : System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string getProducts()
    {
        List<Product> prd = new List<Product>();
        //{
        //  new Product() { Name = "myname", Code = "mycode" },
        //  new Product() { Name = "myname2", Code = "mycode2" }
        //};
        using (SqlConnection cn = new SqlConnection(ado.cnStr))
        {
            SqlCommand cmd = new SqlCommand("SELECT * FROM Product", cn);
            cn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                Product p = new Product();
                p.Name = dr["name"].ToString();
                p.Money = dr["money"].ToString();
                prd.Add(p);
            }
        }

        return new JavaScriptSerializer().Serialize(prd);
    }

    [WebMethod]
    [ScriptMethod]
    [GenerateScriptType(typeof(Product))]
    public void addProduct(Product p)
    {
        // Place your validation code here to ensure the Product property values are in expected whitelists.
        using (SqlConnection cn = new SqlConnection(ado.cnStr))
        {
            SqlCommand cmd = new SqlCommand("INSERT INTO Product (Name, Money) VALUES (@Name, @Money)", cn);
            cmd.Parameters.AddWithValue("@Name", p.Name);
            cmd.Parameters.AddWithValue("@Money", p.Money);

            cn.Open();
            cmd.ExecuteNonQuery();
        }
    }
}
公共类产品
{
公共字符串名称{get;set;}
公共字符串代码{get;set;}
公共字符串Money{get;set;}
公共字符串图像{get;set;}
公共字符串注释{get;set;}
}
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[脚本服务]
公共类iqws:System.Web.Services.WebService
{
[网络方法]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
公共字符串getProducts()
{
List prd=新列表();
//{
//新产品(){Name=“myname”,Code=“mycode”},
//新产品(){Name=“myname2”,Code=“mycode2”}
//};
使用(SqlConnection cn=newsqlconnection(ado.cnStr))
{
SqlCommand cmd=新的SqlCommand(“从产品中选择*”,cn);
cn.Open();
SqlDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
产品p=新产品();
p、 Name=dr[“Name”].ToString();
p、 Money=dr[“Money”]。ToString();
珠江三角洲增补(p);
}
}
返回新的JavaScriptSerializer().Serialize(prd);
}
[网络方法]
[脚本方法]
[生成描述类型(产品类型))]
公共产品(产品p)
{
//将验证代码放在此处,以确保产品属性值位于预期的白名单中。
使用(SqlConnection cn=newsqlconnection(ado.cnStr))
{
SqlCommand cmd=newsqlcommand(“插入到产品(名称、货币)值(@Name、@Money)”,cn);
cmd.Parameters.AddWithValue(“@Name”,p.Name);
cmd.Parameters.AddWithValue(“@Money”,p.Money);
cn.Open();
cmd.ExecuteNonQuery();
}
}
}
以及查询您的服务:

        var ser = new JavaScriptSerializer();
        WebClient wc = new WebClient();
        wc.Headers[HttpRequestHeader.ContentType] = "application/json";
        string url = Request.Url.GetLeftPart(UriPartial.Authority) + "/WS/iqws.asmx/getProducts";
        string json = wc.UploadString(url, String.Empty);
        var data = ser.Deserialize<Dictionary<String, String>>(json);
        List<Product> products = ser.Deserialize<List<Product>>(data["d"]);
var ser=newJavaScriptSerializer();
WebClient wc=新的WebClient();
wc.Headers[HttpRequestHeader.ContentType]=“应用程序/json”;
字符串url=Request.url.GetLeftPart(UriPartial.Authority)+“/WS/iqws.asmx/getProducts”;
string json=wc.UploadString(url,string.Empty);
var data=ser.Deserialize(json);
列表产品=序列反序列化(数据[“d”]);

为什么要尝试将产品上载到
getProducts()
?首先通过调用
webservices.getProducts()
直接从代码中获取产品,然后通过调用带有URL的
wc.UploadString(…)
尝试将该产品集合上载到
getProducts()
方法。如果要使用POST上载产品,则需要另一个
addProducts(products[]p)
方法,该方法将接受
products
数组作为参数。如果您想下载产品列表,请使用GET by,使用类似于
wc.DownloadString(…)
。非常感谢您的帮助,此结构对我更有用,这正是我想要的
public class Product
{
    public String Name { get; set; }
    public String Code { get; set; }
    public String Money { get; set; }
    public String Images { get; set; }
    public String Comments { get; set; }
}

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class iqws : System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string getProducts()
    {
        List<Product> prd = new List<Product>();
        //{
        //  new Product() { Name = "myname", Code = "mycode" },
        //  new Product() { Name = "myname2", Code = "mycode2" }
        //};
        using (SqlConnection cn = new SqlConnection(ado.cnStr))
        {
            SqlCommand cmd = new SqlCommand("SELECT * FROM Product", cn);
            cn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                Product p = new Product();
                p.Name = dr["name"].ToString();
                p.Money = dr["money"].ToString();
                prd.Add(p);
            }
        }

        return new JavaScriptSerializer().Serialize(prd);
    }

    [WebMethod]
    [ScriptMethod]
    [GenerateScriptType(typeof(Product))]
    public void addProduct(Product p)
    {
        // Place your validation code here to ensure the Product property values are in expected whitelists.
        using (SqlConnection cn = new SqlConnection(ado.cnStr))
        {
            SqlCommand cmd = new SqlCommand("INSERT INTO Product (Name, Money) VALUES (@Name, @Money)", cn);
            cmd.Parameters.AddWithValue("@Name", p.Name);
            cmd.Parameters.AddWithValue("@Money", p.Money);

            cn.Open();
            cmd.ExecuteNonQuery();
        }
    }
}
        var ser = new JavaScriptSerializer();
        WebClient wc = new WebClient();
        wc.Headers[HttpRequestHeader.ContentType] = "application/json";
        string url = Request.Url.GetLeftPart(UriPartial.Authority) + "/WS/iqws.asmx/getProducts";
        string json = wc.UploadString(url, String.Empty);
        var data = ser.Deserialize<Dictionary<String, String>>(json);
        List<Product> products = ser.Deserialize<List<Product>>(data["d"]);