【问题标题】:HttpRequestHeaders.Add splits the header on a whitespaceHttpRequestHeaders.Add 在空白处拆分标头
【发布时间】:2019-02-20 11:02:51
【问题描述】:

我正在尝试向我已经拥有的请求(之前有效)添加一个新标头,我想在其中放置某种格式如下的 User-Agent 字符串:

AppName/AppVersionDeviceOS DeviceOSVersion

它的代码是这样写的(请求是HttpRequestMessage):

request.Headers.Add(UserAgentKey, $"{AppName}/{DependencyService.Get<IVersionProperties>().GetAppVersion()} ({Device.RuntimePlatform} {DependencyService.Get<IVersionProperties>().GetOSVersion()})");

但奇怪的是,它在 withspace 上将字符串分成两部分(在 appverion 和左括号之间),导致 User-Agent 标头的 2 个值而不是 1 个统一的整体。

所以我很好奇我在这里做错了什么,我认为它与空格有关,我可能需要以某种方式逃避它,但我不确定如何。我希望有人可以帮助我解决这个问题。

提前致谢。

【问题讨论】:

    标签: c# xamarin.forms http-headers httprequest string-formatting


    【解决方案1】:

    也许不是一个完整的解决方案,但至少是一种解决方法,为什么不先组合字符串:var userAgent = $"{AppName}/{DependencyService.Get&lt;IVersionProperties&gt;().GetAppVersion()} ({Device.RuntimePlatform} {DependencyService.Get&lt;IVersionProperties&gt;().GetOSVersion()});"

    然后取出换行符:userAgent = userAgent.Replace(Environment.NewLine, " ");

    至于原因,我想说其中一个值中有一个换行符。虽然我真的不明白为什么或哪个。您是否单独检查了每个值?

    【讨论】:

      【解决方案2】:

      显然它与我使用的标题有关。

      我使用了标题“User-Agent”,它需要某种格式并且附加了一些其他有趣的业务,例如当我将其更改为“User-Agentt”时它工作得很好,因为我没有明确需要调用标题,我将更改标题的名称。

      【讨论】: