HTML Forms概述

<form action="api/values" method="post">

默认的method是GET,如果使用GET,表单数据被编码到URI中作为查询字符串;如果使用POST,表单数据放在Request body中,enctype属性指定编码类型:

编码方式(enctype) 描述
application/x-www-form-urlencoded 表单数据被编码成name/value形式,默认的编码方式
multipart/form-data 表单数据被编码成多部分的MIME消息,上传文件时使用

application/x-www-form-urlencoded

POST http://localhost:38899/api/updates/complex HTTP/1.1

Accept: text/html, application/xhtml+xml, /

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Content-Type: application/x-www-form-urlencoded

Content-Length: 47

status=Shopping+at+the+mall.&date=6%2F15%2F2012

注意:

默认情况下WebAPI获得复杂类型的参数使用Request body中,简单参数从URI中,可以使用[FromBody]强制从Request body中获取。由于WebAPI最多读取Request body一次,所以action仅有一个参数是来自Request body,如果需要获取多个值从Request body可以使用复杂类型。

对于简单参数,在Request body中消息的格式:

=value

multipart/form-data

POST http://localhost:50460/api/values/1 HTTP/1.1

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip, deflate

Content-Type: multipart/form-data; boundary=---------------------------41184676334

Content-Length: 29278

-----------------------------41184676334

Content-Disposition: form-data; name="caption"

Summer vacation

-----------------------------41184676334

Content-Disposition: form-data; name="image1"; >filename="GrandCanyon.jpg"

Content-Type: image/jpeg

(Binary data not shown)

-----------------------------41184676334--

  • Content-Disposition:包含上传控件的名字、上传的文件的名字

  • Content-Type:描述了这部分数据的类型。默认是text/plain可以省略

    上传的一个demo

     public class UploadController : ApiController
    {
    public async Task<HttpResponseMessage> PostFormData()
    {
    if (!Request.Content.IsMimeMultipartContent())
    {
    throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    } string root = HttpContext.Current.Server.MapPath("~/App_Data");
    var provider = new MultipartFormDataStreamProvider(root); try
    {
    await Request.Content.ReadAsMultipartAsync(provider); foreach (MultipartFileData file in provider.FileData)
    {
    //文件名
    Trace.WriteLine(file.Headers.ContentDisposition.FileName);
    //服务端存储文件路径
    Trace.WriteLine("Server file path:"+file.LocalFileName);
    }
    //对应的name/value
    foreach (var key in provider.FormData.AllKeys)
    {
    foreach (var val in provider.FormData.GetValues(key))
    {
    Trace.WriteLine(string.Format("{0}: {1}", key, val));
    }
    }
    return Request.CreateResponse(HttpStatusCode.OK);
    }
    catch (Exception e)
    {
    return Request.CreateErrorResponse(HttpStatusCode.InternalServerError,e);
    throw;
    }
    }
    }

最新文章

  1. markdown语法说明
  2. .Net程序员之不学Java做安卓开发:奇怪的Java语法
  3. 链表的Java实现
  4. Laravel-5.1 ---- 将mews captcha整合到项目中!
  5. 一个简单的javascript深拷贝
  6. [JSP] c:forEach 输出序号 每行自动生成序号
  7. C 小复习
  8. 11.cadence.通孔类封装创建[原创]
  9. 【windows核心编程】一个API拦截的例子
  10. Redis集群战法整理
  11. &lt;未测&gt;源码升级安装glibc和rpm升级glibc
  12. CentOs文件实时同步
  13. Ant的使用
  14. C# 全选中数字文本框内容
  15. hihoCoder 1039:字符消除(字符串处理)
  16. VMware虚拟机上建立HTTP服务步骤
  17. CF_528D
  18. Python汉诺塔问题
  19. 洛谷P4063 [JXOI2017]数列(dp)
  20. Spring点滴五:Spring中的后置处理器BeanPostProcessor讲解

热门文章

  1. Sass函数--数字函数
  2. asp.net验证控件注意事项
  3. C#中的TCP通讯与UDP通讯
  4. DOM 添加 / 更新 / 删除 XML (CURD)
  5. cas+tomcat+shiro实现单点登录-3-CAS服务器深入配置(连接MYSQL)
  6. HTML 学习网站
  7. (原)python使用ctypes调用C/C++接口
  8. 用Gmap开发winform地图应用程序(一)Gmap介绍与添加
  9. Winform控件缩写
  10. Chrome调试nodejs