首页 > 代码库 > FormBody and FormUri attribute in webapi

FormBody and FormUri attribute in webapi

FormBody和FormUri都仅仅是针对POST的方式进行说明的。

在做webapi的时候,发现对于传值特别是POST的时候,出现了一点点的小麻烦。

先说说FormUri先看看他的继承一些相关类

Web API Action中参数将从URL中解析数据,而数据解析是通过值提供程序工厂创建值提供程序来获取数据的,对于简单类型,值提供程序则获取Action参数名称和参数值;对于复杂类型,值提供程序则获取类型属性名称和属性值。

// 摘要:     //     一个特性,该特性指定操作参数来自传入 System.Net.Http.HttpRequestMessage 的 URI。    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)]    public sealed class FromUriAttribute : ModelBinderAttribute    {        // 摘要:         //     初始化 System.Web.Http.FromUriAttribute 类的新实例。        public FromUriAttribute();        // 摘要:         //     获取模型联编程序的值提供程序工厂。        //        // 参数:         //   configuration:        //     配置。        //        // 返回结果:         //     System.Web.Http.ValueProviders.ValueProviderFactory 对象的集合。        public override IEnumerable<System.Web.Http.ValueProviders.ValueProviderFactory> GetValueProviderFactories(HttpConfiguration configuration);

这里面的ModelBinderAttribute对于参数的模型绑定,还是相当复杂的,到目前为止里面详细的我还是没看到,我只能看懂一个大概

先上一段代码

[HttpPost]        public HttpResponseMessage PostUsers([FromUri]string value1, [FromUri]string value2)        {            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, value1 + "//" + value2);            return response;        }

技术分享

再说说FromBodyAttribute

Web API Action中参数将从请求体(Request Body),并且通过媒体类型格式化器获取和绑定数据,在Web API框架下有4中内置的媒体格式化器,分别是:

       1:JsonMediaTypeFormatter,对应的content-type是:application/json, text/json

       2:XmlMediaTypeFormatter,对应的content-type是:XmlMediaTypeFormatter

      3:FormUrlEncodedMediaTypeFormatter,对应的content-type是:对应的content-type是:application/x-www-form-urlencoded。

      4:JQueryMvcFormUrlEncodedFormatter,对应的content-type是:对应的content-type是:application/x-www-form-urlencoded。

所以这里面以JSON为例

public class Users    {                public string Name        {            get;            set;        }        public string Age        {            get;            set;        }        public string Address        {            get;            set;        }    }

 

[HttpPost]        public HttpResponseMessage PostUsers([FromBody]Users User)        {            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "大家好,我的名字是" + User.Name + ",年龄:" + User.Age + ",地址是:" + User.Address + "");            return response;        }

技术分享

其实webapi看了有一段时间,其中不得不对微软底层感到吃力,只知道大概的意思,而不知道里面的详细步骤,甚至都不能复原其方法,真是不好意思,写了一个四不像。

参考:http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

参考:http://www.cnblogs.com/majiang/archive/2012/12/05/2802896.html

FormBody and FormUri attribute in webapi