3)如何接收 HTML 表单请求

时间:2022-04-15 02:38:49

我们想创建一个能够处理 HTML 表单的 ASP.NET Web API 应用程序(使用 application/x-www-form-urlencoded 方式提交数据)。

解决方案

我们可以创建一个Controller Action 接收一个 ModdelModel 的结构和准备从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 应用程序(MVCWeb Form,或者其他技术)而是用Web API 的时候,提交 form-URL-encoded 数据是一种常见的需求

  ASP.NET Web API 使用 MediaTypeFormatters HttpRequestMessage 表单中提取数据,并且,传输这些数据给相应选择的action 来处理请求。第四章会详细介绍模型绑定和格式化,在这里,我们仅仅接触了直接与处理 HTML 表单相关的概念。

    两个现成的格式化程序能够处理的格式:

  FormUrlEncodedMediaTypeFormatter,用于绑定使用     application/x-www-form-urlencoded 内容类型 FormDataCollection

JQueryMvcFormUrlEncodedFormatter,也是使用同样的内容类型,也可以绑定到ModelDTO

从设计角度来看,后面的应该是前面的子类。

  使用 FormDataCollection 来代替我们action 参数,不仅给我们访问原始表单数据,还通知了 ASP.NET Web API 不执行任何验证。