替换字符串中的{x}标记

 诺 发布于 2023-02-13 20:34

我们有一个模板网址,如:

http://api.example.com/sale?auth_user=xxxxx&auth_pass=xxxxx&networkid={networkid}&category=b2c&country=IT&pageid={pageid}&programid=133&saleid=1&m={master}&optinfo={optinfo}&publisher={publisher}&msisdn={userId}

我有这些常数令牌的价值.如何在C#中替换所有这些令牌?

3 个回答
  • 我猜你正在尝试url用你的值替换参数.这可以使用C#完成HttpUtility.ParseQueryString

    从中获取CurrentURL

       var _myUrl = System.Web.HttpUtility.ParseQueryString(Request.RawUrl);
    

    从查询字符串中读取参数

       string value1 = _myUrl ["networkid"];
    

    将值写入QueryString对象.

      _myUrl ["networkid"] = "Your Value";
    

    然后最后将其转回URL

      var _yourURIBuilder= new UriBuilder(_myUrl );
     _myUrl = _yourURIBuilder.ToString();
    

    2023-02-13 20:38 回答
  • 一个简单的方法是使用a foreachDictionary a String.Replace:

    var values = new Dictionary<string, string> {
        { "{networkid}", "WHEEE!!" }
        // etc.
    };
    var url = "http://api.example.com/sale?auth_user=xxxxx&auth_pass=xxxxx&networkid={networkid}&category=b2c&country=IT&pageid={pageid}&programid=133&saleid=1&m={master}&optinfo={optinfo}&publisher={publisher}&msisdn={userId}";
    
    foreach(var key in values.Keys){
        url = url.Replace(key,values[key]);
    }
    

    2023-02-13 20:38 回答
  • .NET中没有"替换为字典值"的标准方法.虽然有许多模板引擎,但为这样的操作编写一个小解决方案并不是很困难.这是一个在LINQPad中运行的示例,它使用带有匹配评估器的正则表达式.

    结果是一个URL,调用者有责任确保所有提供的值都被正确编码.我建议使用Uri.EscapeDataString适当的..但如果在其他地方处理,请确保不要进行双重编码.

    此外,未找到替代品时应采取的规则应根据需要进行调整.如果未找到替换应该与查询字符串键一起完全消除,以下可以扩展正则表达式以@"\w+=({\w+})"在此特定模板情况下捕获参数键.

    string ReplaceUsingDictionary (string src, IDictionary<string, object> replacements) {
        return Regex.Replace(src, @"{(\w+)}", (m) => {
            object replacement;
            var key = m.Groups[1].Value;
            if (replacements.TryGetValue(key, out replacement)) {
                return Convert.ToString(replacement);
            } else {
                return m.Groups[0].Value;
            }
        });
    }
    
    void Main()
    {
        var replacements = new Dictionary<string, object> {
            { "networkid", "WHEEE!!" }
            // etc.
        };
        var src = "http://api.example.com/sale?auth_user=xxxxx&auth_pass=xxxxx&networkid={networkid}&category=b2c&country=IT&pageid={pageid}&programid=133&saleid=1&m={master}&optinfo={optinfo}&publisher={publisher}&msisdn={userId}";
        var res = ReplaceUsingDictionary(src, replacements);
    
        // -> "http://api.example.com/sale?..&networkid=WHEEE!!&..&pageid={pageid}&..
        res.Dump();
    }
    

    更高级的技术,如反射和变换,是可能的 - 但那些应留给真正的模板引擎.

    2023-02-13 20:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有