【发布时间】:2021-07-07 00:35:23
【问题描述】:
Microsoft.Xrm.Tooling.Connector 命名空间中的 CrmServiceClient 类有一个构造函数,该构造函数将连接字符串作为单个参数(此处记录:https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/developer/xrm-tooling/use-connection-strings-xrm-tooling-connect?view=op-9-1)。
此连接字符串与连接字符串的其他用途相似/熟悉(名称/值对由等号分隔并用分号分隔),但我找不到任何可靠的文档来建议转义特殊字符的具体规则.如果在此特定上下文中,连接字符串值必须包含等号或分号,如何转义?虽然有一些关于 SQL 和 Entity Framework 连接字符串的文档,但它们在完全不同的上下文中使用,所以我看不出有任何理由相信这些上下文中的文档适用于 CrmServiceClient 构造函数上下文。
有没有人有关于此上下文的权威文档的指针,和/或有足够的经验在此上下文来冒险一个相当明确的临时描述?
谢谢。
===========================为回应评论请求而添加
在上面第一个问题的 cmets 中,一位好心的贡献者要求我添加更多关于我的用户故事的细节。要求是我添加自己的构建器/解析器。
我不会创建解析器。解析器将是 CrmServiceClient 构造函数使用的解析器。它是 Xrm 工具连接器的一部分。
我尚未创建构建器来构建将传递给CrmServiceClient 构造函数的连接字符串。我的第一个任务是为该构建器创建一个单元测试,以确定它是否正确构建,这就是为什么我希望解析器强制执行明确的规则。
以下面的连接字符串为例:
AuthType=OAuth;Username=jsmith@contoso.onmicrosoft.com; Password=passcode;Url=https://contosotest.crm.dynamics.com;AppId=51f81489-12ee-4a9e-aaae-a2591f45987d; RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97;LoginPrompt=Auto
在这个基本示例中,连接字符串的键/值对集合中没有任何值包含任何特殊字符,因此无需转义。但是现在让我们想象一下,Password 不是字符串“passcode”,而是充满了特殊字符。假设密码是
"aB4$;";~^''dEfg'!
该密码本身以双引号开头,其中有另一个双引号,有两个单引号和两个分号。期望密码可能包含这样的字符并非没有道理。如果传递给CrmServiceClient 构造函数的连接字符串正是这样:
AuthType=OAuth;Username=jsmith@contoso.onmicrosoft.com; Password="aB4$;";~^''dEfg'!;Url=https://contosotest.crm.dynamics.com;AppId=51f81489-12ee-4a9e-aaae-a2591f45987d; RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97;LoginPrompt=Auto
那么肯定会被解析错误。
这是我试图通过CrmServiceClient 构造函数解析器使用的一组明确规则来解决的问题。
【问题讨论】:
-
到目前为止你尝试过什么?成功了吗?
-
我需要编写一个通用的连接字符串构建器,它本身将获取与不同键相关的参数(AKA 值),然后从中生成一个连接字符串。我当然可以把意大利面扔在墙上并尝试很多事情,但是我可以编写单元测试套件的一组明确定义的规则将非常有帮助。
-
连接字符串只是一个字符串,消费者库负责构建/解析它。作为图书馆的用户,您为什么如此关心格式?
-
@LeiYang - 我知道这一点。但是,如果连接字符串中包含密码,并且该密码中包含分号,则该分号将告诉连接字符串解析器该值已结束,除非以某种方式对其进行转义。还有以空格开头或结尾的值或带有等号的键名......这些都是需要转义的问题。这通常是一个众所周知的问题,但我没有看到适用于用作
CrmServiceClient构造函数参数的连接字符串的规则和约定的具体文档。 -
当你谈到逃跑时,你的真正意思是什么?你的意思是在 xml 中转义?
标签: c# dynamics-crm dynamics-365 xrm-tooling-connector