FormBody and FormUri attribute in webapi
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章