一串长度超过get限制的字符串怎么传给web服务器快疯了!!!

时间:2022-12-30 21:41:26
希望能用到webclient类 我需要传送的字符串超过get限制 没办法用 aspx?str=  的方式来传递,只能用post来传送,我看到webclient有一个方法是uploadstring标明是用来上载字符串,但是我不知道应该怎么写 winform是客户端 webform是服务器,真的快疯了。讲下需求winform端的代码 和webform端的代码  新人 没什么分分 全给了 希望大神能给我解答 帮助 麻烦大家了

26 个解决方案

#1


谁来帮帮我 真的要疯了 UP 

#2


别沉啊!!!!

#3


顶起来 !!!!!

#4


给你写两个例子,一个是上传文件,另一个是上传普通的字符串。

第一,首先使用一个ashx来接收文件
using System.Web;
using System.IO;

public class TestSaveFile : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        var request = context.Request;
        var targetName = context.Server.UrlDecode(request.QueryString["tg"]);
        var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "app_data/UploadFiles", targetName);
        request.Files[0].SaveAs(path);
        context.Response.Output.Write("OK");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

那么客户端可以使用 WebClient.UploadFile 上传文件,例如
var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "clientaccesspolicy.xml");
var data = new WebClient().UploadFile("http://localhost:2171/TestSaveFile.ashx?tg=" + HttpUtility.UrlEncode("测试.txt"), file);
var result = Encoding.UTF8.GetString(data);
Debug.Assert(result == "OK");

#5


接收普通的字符串参数,可以使用这样的一个 ashx 为例
<%@ WebHandler Language="C#" Class="TestWebClientUpload" %>

using System;
using System.Web;

public class TestWebClientUpload : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        using (var sr = new System.IO.StreamReader(context.Request.InputStream))
        {
            var data = sr.ReadToEnd();
            context.Response.ContentType = "text/plain";
            context.Response.Write(string.Format("参数={0}",data));
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}


而假设我们要把一个 .net对象序列化之后上传,例如对象类的定义是
public class MyTestType
{
    public DateTime x;
    public string y;
}

上传一个对象可以写
var obj = new MyTestType
{
    x = DateTime.Now,
    y = "现在"
};
var p = JsonConvert.SerializeObject(obj);
var data = new WebClient().UploadData("http://localhost:2171/TestWebClientUpload.ashx", Encoding.UTF8.GetBytes(p));
var result = Encoding.UTF8.GetString(data);

#6


第一个例子中,假设你的网站的 app_data/UploadFiles/ 目录用来保存文件,客户端选择本地文件上传,同时给了一个参数(这里是用来表示文件名)。

第二个例子,实际上可以传任何字符串参数,例如一本小说的文本内容。这里是把一个用户自定义对象的 json 序列化之后上传,你可以用来在这一个参数中表达比较复杂的结构化数据。

#7


POST在楼主面前难道是座翻不过的大山么? 只要能够完成目的,多走几步路权当是锻炼身体吧.
从URL传递内容和直接传送字符串肯定是有些不同的,只要双方遵守同一规范即可.

#8


url长度超出,那你不可能绕过这个东西,就算你可以压缩字符串,那又如何?服务器不可能认识压缩过的东西,如果服务器能配合你改,那还管get什么事情,服务器直接改成支持post

#9


引用 5 楼 sp1234 的回复:
接收普通的字符串参数,可以使用这样的一个 ashx 为例
<%@ WebHandler Language="C#" Class="TestWebClientUpload" %>

using System;
using System.Web;

public class TestWebClientUpload : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        using (var sr = new System.IO.StreamReader(context.Request.InputStream))
        {
            var data = sr.ReadToEnd();
            context.Response.ContentType = "text/plain";
            context.Response.Write(string.Format("参数={0}",data));
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}


而假设我们要把一个 .net对象序列化之后上传,例如对象类的定义是
public class MyTestType
{
    public DateTime x;
    public string y;
}

上传一个对象可以写
var obj = new MyTestType
{
    x = DateTime.Now,
    y = "现在"
};
var p = JsonConvert.SerializeObject(obj);
var data = new WebClient().UploadData("http://localhost:2171/TestWebClientUpload.ashx", Encoding.UTF8.GetBytes(p));
var result = Encoding.UTF8.GetString(data);
懵懵懂懂 你的意思是把字符串“现在”当做一个对象 然后传给服务器吗?将服务器的page_load里面的东西换成TestWebClientUpload里面的东西 就能实现传送字符串吗?

#10


只能用post啊

#11


引用 10 楼 FoxDave 的回复:
只能用post啊
能不能给写代码 我不知道怎么post 为什么直接用webclient.uploadstring不行呢  

#12


表单提交就是post
uploadstring方法中有个参数是method,你传入post试试

#13


引用 12 楼 FoxDave 的回复:
表单提交就是post
uploadstring方法中有个参数是method,你传入post试试
我是这样写的 Webclient.UploadString  ("http://localhost:61490/savegoods.aspx","POST",picturestr ) 这样不行吗

#14


引用 12 楼 FoxDave 的回复:
表单提交就是post
uploadstring方法中有个参数是method,你传入post试试
Webclient.UploadString  ("http://localhost:61490/savegoods.aspx","POST",picturestr ) 这样如果的的话 那么服务器要怎么写去接收字符串呢 

#15


引用 14 楼 baidu_27259743 的回复:
Quote: 引用 12 楼 FoxDave 的回复:

表单提交就是post
uploadstring方法中有个参数是method,你传入post试试
Webclient.UploadString  ("http://localhost:61490/savegoods.aspx","POST",picturestr ) 这样如果的的话 那么服务器要怎么写去接收字符串呢 

在传入页面的后台接收啊

#16


引用 15 楼 FoxDave 的回复:
Quote: 引用 14 楼 baidu_27259743 的回复:

Quote: 引用 12 楼 FoxDave 的回复:

表单提交就是post
uploadstring方法中有个参数是method,你传入post试试
Webclient.UploadString  ("http://localhost:61490/savegoods.aspx","POST",picturestr ) 这样如果的的话 那么服务器要怎么写去接收字符串呢 

在传入页面的后台接收啊
我知道。。。但是该用的request.form  还是 request.querystring 还是别的?form[]里面的参数应该写什么。。我不懂啊 试了多次 我希望能把字符串进行输出 才能代表我收到这个字符串了吧 比如把字符串放到页面的一个textbox上面之类 或者返回给客户端进行message.show 我真的不知道怎么做了

#17


post多好啊!!不用考虑这么多事情~~~~get的话不仅限长,有时还会遇到中文乱码的问题呢

#18


引用 9 楼 baidu_27259743 的回复:
懵懵懂懂 你的意思是把字符串“现在”当做一个对象 然后传给服务器吗?将服务器的page_load里面的东西换成TestWebClientUpload里面的东西 就能实现传送字符串吗?


咳,看来我是给你的例子写复杂了。

你可以把“上传一个对象”的例子改为这个:

上传一个字符串

var p = "kakdfa8938ksdfa faks23423 我是一个男人 哦也 alsdkfassadf";
var data = new WebClient().UploadData("http://localhost:2171/TestWebClientUpload.ashx", Encoding.UTF8.GetBytes(p));
var result = Encoding.UTF8.GetString(data);


然后看看服务器端程序结果。

#19


一串长度超过get限制的字符串怎么传给web服务器快疯了!!!
这改成POST 不成么,UPload也是POST呀。

#20


引用 18 楼 sp1234 的回复:
咳,看来我是给你的例子写复杂了。

你可以把“上传一个对象”的例子改为这个:

上传一个字符串

var p = "kakdfa8938ksdfa faks23423 我是一个男人 哦也 alsdkfassadf";
var data = new WebClient().UploadData("http://localhost:2171/TestWebClientUpload.ashx", Encoding.UTF8.GetBytes(p));
var result = Encoding.UTF8.GetString(data);


然后看看服务器端程序结果。
按照前面的写了一个.ashx文件,然后客户端用了你上面的方法写的上传字符串,并且我将result利用messagebox导出来 显示的结果是我要上传字符串,但是服务器端还是没有显示参数=“我要的字符串”啊 难道是我的打开方式不对吗?那怎么说明我上传成功了啊?

#21


好吧 :-(,我再给你解释一下测试服务器端程序的代码 
    public void ProcessRequest(HttpContext context)
    {
        using (var sr = new System.IO.StreamReader(context.Request.InputStream))
        {
            var data = sr.ReadToEnd();
            context.Response.ContentType = "text/plain";
            context.Response.Write(string.Format("参数={0}",data));
        }
    }

这里,data变量是保存收到的客户端传来的字符串(可以很长、很长.....的字符串),然后原样输出给客户端。所以你在客户端的程序发现访问服务器得到了“回声”,一字不差,这就对了!

你也可以动手调试这3行代码,分析了解一下到底“服务器获得字符串参数”功能是运用.net的什么功能来实现的。

#22


引用 21 楼 sp1234 的回复:
OK 。。我理解你的意思,也确实发现服务器接收到了这个字符串。。。但能不能再麻烦您一下,这个字符串我传给了服务器 是要去操作的。。比如切割,服务器收到了这个字符串,那么这个字符串怎么变成服务器上一个可以操作的变量呢....???不是要切割的代码,而是要能将这个字符串变成服务器上的变量的做法代码  麻烦了 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!

#23


引用 22 楼 baidu_27259743 的回复:
Quote: 引用 21 楼 sp1234 的回复:
OK 。。我理解你的意思,也确实发现服务器接收到了这个字符串。。。但能不能再麻烦您一下,这个字符串我传给了服务器 是要去操作的。。比如切割,服务器收到了这个字符串,那么这个字符串怎么变成服务器上一个可以操作的变量呢....???不是要切割的代码,而是要能将这个字符串变成服务器上的变量的做法代码  麻烦了 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!


我之前上传多张图片也遇到了这个问题,get超出长度了,改用post,用了“;”作为分隔符,拼成一个大的String再上传 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!

#24


引用 23 楼 a1030260075 的回复:
我之前上传多张图片也遇到了这个问题,get超出长度了,改用post,用了“;”作为分隔符,拼成一个大的String再上传 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!
我想知道你怎么让这个字符串可以在服务器上使用,可能你需要服务器按照你的分隔符把字符串再分割开来,就是服务器能够有一个string的变量等于上传的这个字符串

#25


百度 post ... 

#26


引用 24 楼 baidu_27259743 的回复:
Quote: 引用 23 楼 a1030260075 的回复:



我之前上传多张图片也遇到了这个问题,get超出长度了,改用post,用了“;”作为分隔符,拼成一个大的String再上传 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!
我想知道你怎么让这个字符串可以在服务器上使用,可能你需要服务器按照你的分隔符把字符串再分割开来,就是服务器能够有一个string的变量等于上传的这个字符串


我是写前台移动端的,分隔符都是跟后台商量好的,后台怎么处理我就不清楚了 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!

#1


谁来帮帮我 真的要疯了 UP 

#2


别沉啊!!!!

#3


顶起来 !!!!!

#4


给你写两个例子,一个是上传文件,另一个是上传普通的字符串。

第一,首先使用一个ashx来接收文件
using System.Web;
using System.IO;

public class TestSaveFile : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        var request = context.Request;
        var targetName = context.Server.UrlDecode(request.QueryString["tg"]);
        var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "app_data/UploadFiles", targetName);
        request.Files[0].SaveAs(path);
        context.Response.Output.Write("OK");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

那么客户端可以使用 WebClient.UploadFile 上传文件,例如
var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "clientaccesspolicy.xml");
var data = new WebClient().UploadFile("http://localhost:2171/TestSaveFile.ashx?tg=" + HttpUtility.UrlEncode("测试.txt"), file);
var result = Encoding.UTF8.GetString(data);
Debug.Assert(result == "OK");

#5


接收普通的字符串参数,可以使用这样的一个 ashx 为例
<%@ WebHandler Language="C#" Class="TestWebClientUpload" %>

using System;
using System.Web;

public class TestWebClientUpload : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        using (var sr = new System.IO.StreamReader(context.Request.InputStream))
        {
            var data = sr.ReadToEnd();
            context.Response.ContentType = "text/plain";
            context.Response.Write(string.Format("参数={0}",data));
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}


而假设我们要把一个 .net对象序列化之后上传,例如对象类的定义是
public class MyTestType
{
    public DateTime x;
    public string y;
}

上传一个对象可以写
var obj = new MyTestType
{
    x = DateTime.Now,
    y = "现在"
};
var p = JsonConvert.SerializeObject(obj);
var data = new WebClient().UploadData("http://localhost:2171/TestWebClientUpload.ashx", Encoding.UTF8.GetBytes(p));
var result = Encoding.UTF8.GetString(data);

#6


第一个例子中,假设你的网站的 app_data/UploadFiles/ 目录用来保存文件,客户端选择本地文件上传,同时给了一个参数(这里是用来表示文件名)。

第二个例子,实际上可以传任何字符串参数,例如一本小说的文本内容。这里是把一个用户自定义对象的 json 序列化之后上传,你可以用来在这一个参数中表达比较复杂的结构化数据。

#7


POST在楼主面前难道是座翻不过的大山么? 只要能够完成目的,多走几步路权当是锻炼身体吧.
从URL传递内容和直接传送字符串肯定是有些不同的,只要双方遵守同一规范即可.

#8


url长度超出,那你不可能绕过这个东西,就算你可以压缩字符串,那又如何?服务器不可能认识压缩过的东西,如果服务器能配合你改,那还管get什么事情,服务器直接改成支持post

#9


引用 5 楼 sp1234 的回复:
接收普通的字符串参数,可以使用这样的一个 ashx 为例
<%@ WebHandler Language="C#" Class="TestWebClientUpload" %>

using System;
using System.Web;

public class TestWebClientUpload : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        using (var sr = new System.IO.StreamReader(context.Request.InputStream))
        {
            var data = sr.ReadToEnd();
            context.Response.ContentType = "text/plain";
            context.Response.Write(string.Format("参数={0}",data));
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}


而假设我们要把一个 .net对象序列化之后上传,例如对象类的定义是
public class MyTestType
{
    public DateTime x;
    public string y;
}

上传一个对象可以写
var obj = new MyTestType
{
    x = DateTime.Now,
    y = "现在"
};
var p = JsonConvert.SerializeObject(obj);
var data = new WebClient().UploadData("http://localhost:2171/TestWebClientUpload.ashx", Encoding.UTF8.GetBytes(p));
var result = Encoding.UTF8.GetString(data);
懵懵懂懂 你的意思是把字符串“现在”当做一个对象 然后传给服务器吗?将服务器的page_load里面的东西换成TestWebClientUpload里面的东西 就能实现传送字符串吗?

#10


只能用post啊

#11


引用 10 楼 FoxDave 的回复:
只能用post啊
能不能给写代码 我不知道怎么post 为什么直接用webclient.uploadstring不行呢  

#12


表单提交就是post
uploadstring方法中有个参数是method,你传入post试试

#13


引用 12 楼 FoxDave 的回复:
表单提交就是post
uploadstring方法中有个参数是method,你传入post试试
我是这样写的 Webclient.UploadString  ("http://localhost:61490/savegoods.aspx","POST",picturestr ) 这样不行吗

#14


引用 12 楼 FoxDave 的回复:
表单提交就是post
uploadstring方法中有个参数是method,你传入post试试
Webclient.UploadString  ("http://localhost:61490/savegoods.aspx","POST",picturestr ) 这样如果的的话 那么服务器要怎么写去接收字符串呢 

#15


引用 14 楼 baidu_27259743 的回复:
Quote: 引用 12 楼 FoxDave 的回复:

表单提交就是post
uploadstring方法中有个参数是method,你传入post试试
Webclient.UploadString  ("http://localhost:61490/savegoods.aspx","POST",picturestr ) 这样如果的的话 那么服务器要怎么写去接收字符串呢 

在传入页面的后台接收啊

#16


引用 15 楼 FoxDave 的回复:
Quote: 引用 14 楼 baidu_27259743 的回复:

Quote: 引用 12 楼 FoxDave 的回复:

表单提交就是post
uploadstring方法中有个参数是method,你传入post试试
Webclient.UploadString  ("http://localhost:61490/savegoods.aspx","POST",picturestr ) 这样如果的的话 那么服务器要怎么写去接收字符串呢 

在传入页面的后台接收啊
我知道。。。但是该用的request.form  还是 request.querystring 还是别的?form[]里面的参数应该写什么。。我不懂啊 试了多次 我希望能把字符串进行输出 才能代表我收到这个字符串了吧 比如把字符串放到页面的一个textbox上面之类 或者返回给客户端进行message.show 我真的不知道怎么做了

#17


post多好啊!!不用考虑这么多事情~~~~get的话不仅限长,有时还会遇到中文乱码的问题呢

#18


引用 9 楼 baidu_27259743 的回复:
懵懵懂懂 你的意思是把字符串“现在”当做一个对象 然后传给服务器吗?将服务器的page_load里面的东西换成TestWebClientUpload里面的东西 就能实现传送字符串吗?


咳,看来我是给你的例子写复杂了。

你可以把“上传一个对象”的例子改为这个:

上传一个字符串

var p = "kakdfa8938ksdfa faks23423 我是一个男人 哦也 alsdkfassadf";
var data = new WebClient().UploadData("http://localhost:2171/TestWebClientUpload.ashx", Encoding.UTF8.GetBytes(p));
var result = Encoding.UTF8.GetString(data);


然后看看服务器端程序结果。

#19


一串长度超过get限制的字符串怎么传给web服务器快疯了!!!
这改成POST 不成么,UPload也是POST呀。

#20


引用 18 楼 sp1234 的回复:
咳,看来我是给你的例子写复杂了。

你可以把“上传一个对象”的例子改为这个:

上传一个字符串

var p = "kakdfa8938ksdfa faks23423 我是一个男人 哦也 alsdkfassadf";
var data = new WebClient().UploadData("http://localhost:2171/TestWebClientUpload.ashx", Encoding.UTF8.GetBytes(p));
var result = Encoding.UTF8.GetString(data);


然后看看服务器端程序结果。
按照前面的写了一个.ashx文件,然后客户端用了你上面的方法写的上传字符串,并且我将result利用messagebox导出来 显示的结果是我要上传字符串,但是服务器端还是没有显示参数=“我要的字符串”啊 难道是我的打开方式不对吗?那怎么说明我上传成功了啊?

#21


好吧 :-(,我再给你解释一下测试服务器端程序的代码 
    public void ProcessRequest(HttpContext context)
    {
        using (var sr = new System.IO.StreamReader(context.Request.InputStream))
        {
            var data = sr.ReadToEnd();
            context.Response.ContentType = "text/plain";
            context.Response.Write(string.Format("参数={0}",data));
        }
    }

这里,data变量是保存收到的客户端传来的字符串(可以很长、很长.....的字符串),然后原样输出给客户端。所以你在客户端的程序发现访问服务器得到了“回声”,一字不差,这就对了!

你也可以动手调试这3行代码,分析了解一下到底“服务器获得字符串参数”功能是运用.net的什么功能来实现的。

#22


引用 21 楼 sp1234 的回复:
OK 。。我理解你的意思,也确实发现服务器接收到了这个字符串。。。但能不能再麻烦您一下,这个字符串我传给了服务器 是要去操作的。。比如切割,服务器收到了这个字符串,那么这个字符串怎么变成服务器上一个可以操作的变量呢....???不是要切割的代码,而是要能将这个字符串变成服务器上的变量的做法代码  麻烦了 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!

#23


引用 22 楼 baidu_27259743 的回复:
Quote: 引用 21 楼 sp1234 的回复:
OK 。。我理解你的意思,也确实发现服务器接收到了这个字符串。。。但能不能再麻烦您一下,这个字符串我传给了服务器 是要去操作的。。比如切割,服务器收到了这个字符串,那么这个字符串怎么变成服务器上一个可以操作的变量呢....???不是要切割的代码,而是要能将这个字符串变成服务器上的变量的做法代码  麻烦了 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!


我之前上传多张图片也遇到了这个问题,get超出长度了,改用post,用了“;”作为分隔符,拼成一个大的String再上传 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!

#24


引用 23 楼 a1030260075 的回复:
我之前上传多张图片也遇到了这个问题,get超出长度了,改用post,用了“;”作为分隔符,拼成一个大的String再上传 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!
我想知道你怎么让这个字符串可以在服务器上使用,可能你需要服务器按照你的分隔符把字符串再分割开来,就是服务器能够有一个string的变量等于上传的这个字符串

#25


百度 post ... 

#26


引用 24 楼 baidu_27259743 的回复:
Quote: 引用 23 楼 a1030260075 的回复:



我之前上传多张图片也遇到了这个问题,get超出长度了,改用post,用了“;”作为分隔符,拼成一个大的String再上传 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!
我想知道你怎么让这个字符串可以在服务器上使用,可能你需要服务器按照你的分隔符把字符串再分割开来,就是服务器能够有一个string的变量等于上传的这个字符串


我是写前台移动端的,分隔符都是跟后台商量好的,后台怎么处理我就不清楚了 一串长度超过get限制的字符串怎么传给web服务器快疯了!!!