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的主要内容,如果未能解决你的问题,请参考以下文章

在反应中使用fetch时的null [FormBody]字符串值

OkHttp:NoClassDefFoundError

OkHttp:NoClassDefFoundError

OkHttp:NoClassDefFoundError

OkHttp:NoClassDefFoundError

Rails,如何在它们之间使用“and”运算符链接范围?