我们想创建一个能够处理 HTML 表单的 ASP.NET Web API 应用程序(使用 application/x-www-form-urlencoded 方式提交数据)。
解决方案
我们可以创建一个Controller Action 接收一个 Moddel,Model 的结构和准备从HTML 表单提交的准备处理的结构相似,模型绑定依赖于 ASP.NET Web API 来处理。模型中的属性名字和 HTTP 请求中要用的名字要匹配。
public HttpResponseMessage Post(RegistrationModel model) { //omitted for brevity}另外,我们可以使用System.Net.Http.Formatting.FormDataCollection作为 Action 方法的参数。框架将会通过键值对集合的方式传值,允许我们手动处理我们想要的值。
public HttpResponseMessage Post(FormDataCollection form) { //omitted for brevity}
工作原理
当时使用 ASP.NET Web API 构建 web 应用程序,甚至,为了促进现有 Web 应用程序(MVC,Web Form,或者其他技术)而是用Web API 的时候,提交 form-URL-encoded 数据是一种常见的需求。
ASP.NET Web API 使用 MediaTypeFormatters 从HttpRequestMessage 表单中提取数据,并且,传输这些数据给相应选择的action 来处理请求。第四章会详细介绍模型绑定和格式化,在这里,我们仅仅接触了直接与处理 HTML 表单相关的概念。
两个现成的格式化程序能够处理的格式:
FormUrlEncodedMediaTypeFormatter,用于绑定使用 application/x-www-form-urlencoded 内容类型的 FormDataCollection。
JQueryMvcFormUrlEncodedFormatter,也是使用同样的内容类型,也可以绑定到Model(DTO)
从设计角度来看,后面的应该是前面的子类。
使用 FormDataCollection 来代替我们action 参数,不仅给我们访问原始表单数据,还通知了 ASP.NET Web API 不执行任何验证。