【问题标题】:Create own Uri with parameters使用参数创建自己的 Uri
【发布时间】:2015-01-18 20:14:28
【问题描述】:

我试图用一些参数创建我自己的 Uri。我写了这个,但它不起作用:

string url = "http://arweb.elwin013.com/api/rest/tag/getNearestTags?latitude=" + lat.ToString("0.00000") + "&longitude=" + lon.ToString("0.00000") + "&distance=100000";
var response = await client.GetAsync(new Uri(url));

知道为什么吗?

【问题讨论】:

  • 详细说明“不起作用”。
  • 它不下载 json。然后我写了它只适用于没有参数的 uri。

标签: c# web-services windows-phone-8.1 uri


【解决方案1】:

您的问题是 ToString 方法将数字转换为带有 , 的字符串。这会破坏服务器,使其返回 http-500 错误。

要修复您的代码,请确保使用接受 InvariantCultureToString 重载,如下所示:

decimal lat = 1.25M;
decimal lon = 2.25M;
string url = "http://arweb.elwin013.com/api/rest/tag/getNearestTags?latitude=" + 
   lat.ToString("0.00000",CultureInfo.InvariantCulture) + 
   "&longitude=" + 
   lon.ToString("0.00000",CultureInfo.InvariantCulture) + 
   "&distance=100000";
var u = new Uri(url);
Debug.WriteLine(u); // use this to verify how your real Url would look
var response = await client.GetAsync(u);

您也可以使用 UriBuilder 类来构建您的 Uri:

var builder = new UriBuilder {
     Scheme = "http"
     , Host ="arweb.elwin013.com"
     , Path = "api/rest/tag/getNearestTags"
     , Query = String.Format(
        CultureInfo.InvariantCulture,
        "latitude={0:0.00000}&longitude={1:0.00000}&distance=100000",
        lat, 
        lon)
   };
var response = await client.GetAsync(builder.Uri);

如果您必须构建复杂的 Uri,这可能会使事情更有条理、更易于维护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-24
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多