卜若的代码笔记系列-Web系列-SpringBoot-第九章:使用c#上传表单-3209
1.首先,c#向web服务上传数据其实是通过一个
HttpWebRequest对象,这个对象不是通过new出来的,是通过建立url连接产生的对象,我们可以这样
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
//url指的是你请求的服务器路由,比如我这个:
http://localhost:8080/file/save
它是服务器里面负责解决提交数据的策略
@RestController
@RequestMapping("/file")
public class FileController {
@PostMapping(value ="/save")
public void outSave() throws IOException
{
ServletRequestAttributes servletRequestAttributes =
(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
HttpServletResponse response = servletRequestAttributes.getResponse();
int len = request.getContentLength();
System.out.println(request.getContentType()+request.getParameter("author"));
}
}
我们通过这个对象可以向服务器写流,然后服务器可以接收到这些流。我们可以通过
Stream stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
向服务器直接写数据,然后服务器就能够接收到,实际上,这两句代码下面代表着非常复杂的传输底层,然而,身为web程序员,其实
绝大部分情况下我们并不需要关心,你只需要知道可以通过这种方式将数据上传到服务器就行了。
接下来,我们需要准备数据
我们通过一个字典来存储我们的数据,但是将字典的数据组装字符串并且write给服务器时,我们需要注意一个细节
数据的分隔符使用"&"
这个分隔符是srpingboot它自带的一个request.getParameter("arg");约定的分隔符。
我们来看我们组装的格式
string buffer = "";
foreach (string key in parameters.Keys)
{
buffer += key + "=" + parameters[key] + "&";
}
这种格式其实是仿照json来的,这里不做详细赘述
接下来,通过utf-8编码将数据编码成byte流
byte[] data = Encoding.UTF8.GetBytes(buffer);
然后write。就能实现表单的传输
完整的代码:
public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> paraDic)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string buffer = "";
foreach (string key in paraDic.Keys)
{
buffer += key + "=" + paraDic[key] + "&";
}
byte[] data = Encoding.UTF8.GetBytes(buffer);
Stream stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
return request.GetResponse() as HttpWebResponse;
}
测试:
static void Main(string[] args)
{
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("author", "你是傻逼");
parameters.Add("author1", "你是傻逼");
HttpWebResponse response = Program.CreatePostHttpResponse("http://localhost:8080/file/save", parameters);
}
结果:
图片: