web前端

位置:IT落伍者 >> web前端 >> 浏览文章

WebAPI下的如何实现参数绑定


发布日期:2018年06月17日
 
WebAPI下的如何实现参数绑定

本文将概述在WebAPI方式下将如何将参数绑定到一个action方法包括参数是如何被读取一系列规则决定特定环境采用的那种绑定方式文章最后将给出一些实际的例子

Parameter binding说到底是接到一个Http请求将其转换成NET类型使得action方法的签名更易于理解

请求消息(request message)包括了请求的所有信息如带查询字符串的请求地址(URL)内容主体(content body)及头部信息(header)在没有采用parameter binding

的情况下每个action方法将需要接收request message并手动从中提取出参数如下所示

public object MyAction(HttpRequestMessage request){ // make explicit calls to get parameters from the request object int id = intParse(requestRequestUriParseQueryString()Get(id)); // need error logic! Customer c = requestContentReadAsAsync()Result; // should be async! // Now use id and customer}

很显然这样的方式丑陋易出错代码重复而且难以单元测试我们希望action的签名类似以下的形式

public object MyAction(int id Customer c) { }

那么WebAPI是如何将request message转换成像id和customer这样的参数的呢?

Model Binding vs Formatters

参数绑定有两种技术Model Binding和Formatters实际上WebAPI使用model binding读取查询字符串(query string)内容进行参数绑定使用Formatters读取主体内容

(body content)进行参数的绑定

Using Model Binding:

ModelBinding和MVC中的此概念是一致的更多内容见Here通常有一个ValuePeoviders提供数据片断如查询字符串参数model binder将这些片断组合成一个对象

Using Formatters

Formatters(如MediaTypeFormatter类所示)实际上是包含额外元数据的序列化程序WebAPI从HttpConfiguration中获取一个formatters的列表然后通过request信息

中的contenttype来判断采用具体合适的formatterWebAPI有不少默认的formatters默认的JSON formatter是JSONNET还有Xml formatter和采用JQuery语法的

FormUrl formatter

其中Formatters的核心方法是MediaTypeFormatterReadFromStreamAsync如下所示

public virtual Task

上一篇:XML技术与数据库的发展趋势分析

下一篇:Web Service实现SOA的关注点分离