.net将实体转成url参数

前言

在http请求的时候,特别是我们使用post请求的时候,都要将请求的参数转化为url参数,如:a=xxxx&b=xxxx,我们一般都是习惯于使用实体来传送参数,比如OrderRequest 类,这就产生了从实体转化为url参数的过程。

实体转化为url带参的方法

public static class UrlHelper
    {
        public static string ObjectToQuery<T>(this T obj, bool isAddEmptyValue = true, string orderBy = null, string removeFiled = null /*移除那个字段*/, string fieldReplace = null /*格式old,name*/) where T : class
        {
            if (obj == null)
            {
                return "";
            }
            var properties = obj.GetType().GetProperties();
            var list = new List<string>();
            foreach (var item in properties)
            {
                if (removeFiled != null && item.Name == removeFiled)
                {
                    //移除不必要字段
                    continue;
                }
                var proValue = item.GetValue(obj, null);
                if ((proValue != null && !string.IsNullOrEmpty(proValue.ToString())) || isAddEmptyValue)
                {
                    var value = proValue != null ? proValue.ToString() : "";
                    value = value.Replace("+", "%20");
                    var filedName = item.Name;
                    //替换key名字,如xxx_Name替换为xxx[0].Name
                    if (!string.IsNullOrEmpty(fieldReplace))
                    {
                        var arry = fieldReplace.Split(‘$‘);
                        if (arry.Length > 1)
                        {
                            filedName = filedName.Replace(arry[0], arry[1]);
                        }
                    }
                    list.Add(filedName + "=" + value);
                }
            }
            if (orderBy != null)
            {
                switch (orderBy)
                {
                    case "asc":
                        {
                            list = list.OrderBy(m => m).ToList();
                            break;
                        }
                    default:
                        {
                            list = list.OrderByDescending(m => m).ToList(); break;
                        }
                }
            }
            return string.Join("&", list);
        }
    }

具体参数的意思:

1、 isAddEmptyValue:是否去掉如果值为空的实体,如:a=&b=xxxx&c=xxxxx,就会将a去除

2、orderBy :是按字母的升序还是降序进行排序

3、removeFiled:移除哪些字段以及值,主要是有些实体虽然有赋值,但是不需要传

4、fieldReplace:主要是替换关键字的,比如我们url要求是passagner[0].name,由于C#不支持[0].这样命名变量名,因此可以将其先命名为passagener__name,然后是__$[0]这样替换

实例

class Program
    {
        static void Main(string[] args)
        {
            TestRequest testRequest = new TestRequest()
            {
                contactMobile = "133xxxxxxx",
                contactUser = "测试",
                passengers__idNumber = "440103xxxxxxxx",
                passengers__idType = "1",
                passengers__name = "测试"
            };
            Console.WriteLine("{0}", UrlHelper.ObjectToQuery(testRequest,fieldReplace:"__$[0].",removeFiled:"contactUser"));
            Console.ReadLine();
        }
    }

结果为:

结论:

1、实体转化为url经常会使用,

2、.net不支持变量名为passagener[0].name 这样的命名,

3、以后还可以根据自己的情况进行扩展

时间: 2024-10-12 17:06:45

.net将实体转成url参数的相关文章

把URL参数解析成一个Json对象

问题:请编写一个JavaScript函数parseQueryString,它的用途是把URL参数解析为一个对象.           eg:var obj=parseQueryString(url); 创建对象的三种形式:        一:                var Person=new Object();                Person.name="Sun";                Person.age=24;        二:         

Javascript 获取链接(url)参数的方法

qa项目可能需要客户端获取到url的参数,搜到一个很好的解决方法,记录在博客,省得以后找麻烦. 方法一:分解链接的方式 <script type="text/javascript"> /* * 说明:Javascript 获取链接(url)参数的方法 */ function getQueryString(name) { // 如果链接没有参数,或者链接中不存在我们要获取的参数,直接返回空 if(location.href.indexOf("?")==-1

谷歌搜索参数url参数详解

谷歌搜索表单参数url参数详解 q(Query):查询的关键词,搜索查询q是必需的URL参数之一,其他都是可选的. 当q的值包含多个单词时,用加号分隔每个单词.(text) hl(Interface Language):Google搜索的界面语言hl=zh-CN简体中文语言界面,我们用的Google中文就是这个参数.hl=zh-TW繁体中文语言界面,港台地区常使用hl=en-英文语言界面 lr(Language Restrict):搜索内容的语言限定限定只搜索某种语言的网页.如果lr参数为空,则

Objective-C中把数组中字典中的数据转换成URL

可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对.而在OC我们要用字典(Dictionary)来存储,当然了Java用的是Map来存储键值对.下面我们将实现一个极为实用的小例子,网络请求有get和post方法,两种方法各有其优点.在表单提交时Post方法用的更多一些,URL传值则会用到Get方法.在用PHP编程的时候肯定会经常拼接url来传参或者请求,在IOS开发中会向服务器通过url请求一些数据,所以对url的拼接是少

程序ajax请求公共组件app-jquery-http.js中url参数部分的项目应用

结合微信登录以及微信支付的案例:= =||| (案例比较奇葩复杂) 简述项目流程: 1.获取用于公众号支付的openid(公众平台):在微信内置浏览器中打开网页链接,刚进入页面就通过微信公众平台获取该微信用户的code,拿到code传给后台,换取用户的openid. 2.微信登录(开放平台):微信登录通过微信开放平台,由于第一步公众平台拿到的code会混淆开放平台的code,导致用户使用微信登录失败,就需要使用该插件将url参数重置. 3.微信支付(公众平台):像后台传输步骤一获取的openid

OC中如何把数组中字典的数据转换成URL?

在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么实现的呢?今天小编就将为大家分享一篇在网上看到的一位大神对Objective-C中把数组字典的数据转换成URL的剖析,一起来看看吧. 1.生成测试数据 字典中的键,我们一般是通过宏定义来初始化的,目的是便于维护,提高代码编写效率,下面是对key的宏定义: //定义字典键 #define A @"a&

PHP获取 当前页面名称、主机名、URL完整地址、URL参数、获取IP

$URL['PHP_SELF'] = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : (isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $_SERVER['ORIG_PATH_INFO']);   //当前页面名称 $URL['DOMAIN'] = $_SERVER['SERVER_NAME'];  //域名(主机名) $URL['QUERY_STRING'] = $_

url参数截取

因开发中使用较多,封装成了一个方法,返回一个json对象 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>url参数截取</title> </head> <body> <script type="text/javascript"> var url =

有些时候会看到url参数上出现%BF之类

这是URLDecoder和URLEncoder的原因 因为他们是参数,避免影响网页的连接跳转,再到了服务器的时候会自动转过来 当URL地址中仅包含普通非中文字符串和application/x-www-form-urlencoded MIME字符串无须转换,而包含中文字符串的普通字符串则需要转换, 换句话说,也就是说URL地址中有"中文字符串"传递时,才会考虑用到上面提到的两个类, 这样就可以将传递过来的中文接受后,再还原成原来的中文字符串.如不转换,则通过URL传递过来的中文字符中会变