首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#逃逸序列引入不必要的反斜杠,同时从Web控制器返回字符串

C#逃逸序列引入不必要的反斜杠,同时从Web控制器返回字符串
EN

Stack Overflow用户
提问于 2016-01-30 06:41:20
回答 2查看 1.4K关注 0票数 1

我想做一件很简单的事。

代码语言:javascript
运行
复制
 string img = "sadadsasdsa";
 string res = @"<image src=""data:img/jpg;base64," + img + @"""/>";

我得到的输出为<image src=\"data:img/jpg;base64,sadadsasdsa\"/>

而我想要的输出是<image src="data:img/jpg;base64,sadadsasdsa"/>

我不希望在数据之前和结尾添加意外的“\”。

我甚至尝试使用反斜杠作为转义序列

string res = "<image src=\"data:img/jpg;base64," + img + "\"/>";

我的输出还是一样的。我在这里错过了什么?

好的,当我用console.writeline打印上面的“res”字符串时,我没有得到这个神奇的斜线。但是当我在调试器中查看它时,我确实看到了它。当我从web值控制器返回字符串时,我仍然会看到它。我想这与字符串文字的解析有关。

代码语言:javascript
运行
复制
 [HttpGet]
    [Route("api/quotes/image")]
    public string ImageString()
    {
        string imgg = "sadadsasdsa" + "\"";
        string ress = @"<image src=""data:img/jpg;base64," + imgg + "/>";
        return ress;
       }  

当我试图使用Console.WriteLine打印字符串时,我没有看到不需要的反斜杠。但是,在调试器和从WebAPI控制器返回字符串时,我确实看到了它,如上面所示。

EN

Stack Overflow用户

回答已采纳

发布于 2016-01-30 06:54:59

绳子“res”好像坏了。但是,使用字符串格式是一种选择吗?例如:

代码语言:javascript
运行
复制
string img = "sadadsasdsa";       
string actual = string.Format(
                       CultureInfo.InvariantCulture,
                       "<image src=\"data:img/jpg;base64,{0}\"/>",
                       img);

string expected = "<image src=\"data:img/jpg;base64,sadadsasdsa\"/>";

这里的编辑是一个代码片段,它从您的初始问题返回连接的字符串:

代码语言:javascript
运行
复制
public class ValuesController : ApiController 
{
    public IEnumerable<string> Get()
    {
        // your string concat
        string img = "sadadsasdsa";
        string actual = string.Format(
                               CultureInfo.InvariantCulture,
                               "<image src=\"data:img/jpg;base64,{0}\"/>",
                               img);

        // DEBUG ONLY - for simplicity use ASCII encoding
        Encoding enc = Encoding.ASCII;
        foreach (byte b in enc.GetBytes(actual))
        {
            // write bytes and characters
            Debug.WriteLine(b.ToString("X2") + " " + enc.GetString(new byte[] {b}));
        }

        return new string[] { actual };
    }

在调试窗口中,您将看到字符串‘’不是是否包含反斜杠(0x5C),如所需:3C < 69 i 6D m 61 a 67 g 65 e 20 73 s 72 r 63 c 3D = 22 " 64 d 61 a 74 t 61 a 3A : 69 i 6D m ...

接收到的HTTP响应包含由JSON序列化程序引入的转义双引号。因为双引号在JSON中是有意义的,所以它们必须在JSON值中转义。这可以在Fiddler Response Raw视图中观察到:Content-Type: application/json; charset=utf-8 ["<image src=\"data:img/jpg;base64,sadadsasdsa\"/>"]

反序列化之后,响应包含没有反斜杠的字符串。这可以在Fiddler Response JSON视图中观察到。(我使用Fiddler 4.6.2.0)

主要相关:question 9462425

您还可以使用Postman (Chrome扩展)查看这一点,这对于更改HTTP请求的“接受”头非常有用。'application/json‘将返回JSON,'application/ XML’将返回XML。两种格式在序列化时的外观非常不同。玩弄Accept并查看得到的响应说明了转义有意义字符的必要性。

如果这有帮助的话,你会不会这么好心地取消投票呢?

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35098896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档