标签: uribuilder

在Android中使用URI构建器或使用变量创建URL

我正在开发一款Android应用.我需要为我的应用程序构建一个URI来发出API请求.除非有另一种方法将变量放在URI中,否则这是我发现的最简单的方法.我发现你需要使用Uri.Builder,但我不太清楚如何使用.我的网址是:

http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value 
Run Code Online (Sandbox Code Playgroud)

我的方案是http,权限是lapi.transitchicago.com,路径是/api/1.0,路径段是ttarrivals.aspx,查询字符串是key=[redacted]&mapid=value.

我的代码如下:

Intent intent = getIntent();
String value = intent.getExtras().getString("value");
Uri.Builder builder = new Uri.Builder();
builder.scheme("http")
    .authority("www.lapi.transitchicago.com")
    .appendPath("api")
    .appendPath("1.0")
    .appendPath("ttarrivals.aspx")
    .appendQueryParameter("key", "[redacted]")
    .appendQueryParameter("mapid", value);
Run Code Online (Sandbox Code Playgroud)

我明白我能做到URI.add,但我该如何将其整合到Uri.Builder?我要补充的一切都像URI.add(scheme),URI.add(authority)等等?或者这不是这样做的方法吗?此外,还有其他更简单的方法将变量添加到URI/URL吗?

android uri uribuilder

190
推荐指数
5
解决办法
16万
查看次数

UriBuilder无法编码UriBuilder注册标志

我正在开发一个asp.net mvc Web应用程序.现在我的操作系统值等于: -

在此输入图像描述

我正在使用以下代码构建一个包含上述值的URL,如下所示: -

var query = HttpUtility.ParseQueryString(string.Empty);
query["osName"] = OperatingSystem;


var url = new UriBuilder(apiurl);
url.Query = query.ToString();
string xml = client.DownloadString(url.ToString());
Run Code Online (Sandbox Code Playgroud)

但生成的URL将包含操作系统的以下值: -

osName=Microsoft%u00ae+Windows+Server%u00ae+2008+Standard
Run Code Online (Sandbox Code Playgroud)

因此,%u00ae+当我尝试解码%u00ae+使用在线网站(例如http://meyerweb.com/eric/tools/dencoder/)时,UriBuilder会对已注册的符号进行编码,因此它不会解码%u00ae+为寄存器符号??? 所以,有人可以请求,我如何在我的网址内发送注册的标志?这是UrilBuilder中的一个问题吗?

谢谢

编辑 这将清楚地说明我的问题..现在我传递资产名称值,现在查询["assetName"]将获得正确的值..但在查询中,值将被错误地编码(将不能使用UTF8编码)!!!

在此输入图像描述

.net c# asp.net asp.net-mvc uribuilder

10
推荐指数
1
解决办法
613
查看次数

UriBuilder.Query

我在.NET中发现了一个奇怪的行为UriBuilder

Senario 1:

 Dim uri As New UriBuilder("http://www.test/login.aspx")
 uri.Query = "?test=Test"
 Dim url As String = uri.ToString()
Run Code Online (Sandbox Code Playgroud)

运行此代码后,url字符串包含"http://www.test/login.aspx ?? test = Test"

解决方法是不添加?.

Senario 2:

 Dim uri As New UriBuilder("http://www.test/login.aspx?test=123")
 uri.Query += "&abc=Test"
 Dim url As String = uri.ToString()
Run Code Online (Sandbox Code Playgroud)

运行该代码之后我们还有两个?的 "http://www.test:80/login.aspx的??测试= 123&ABC =测试".

在使用uri构建器时,我做错了吗?

.net uribuilder

8
推荐指数
2
解决办法
4648
查看次数

为什么.NET有一个UriBuilder而不是UrlBuilder?

好的,所以我已经理解了URL和URI之间的这种差异,我觉得我现在明白了两者之间的区别.

我现在明白的是为什么.NET Framework有一个UriBuilder类,据我所知,它只适用于作为资源定位器的 URI,因此应该正确地称为UrlBuilder.

有人可以给我一个UriBuilder用于构建不是资源定位器的URI 的示例吗?或者在.NET框架设计中做出这个决定的一些理由?

url uri uribuilder

8
推荐指数
1
解决办法
942
查看次数

URIBuilder 和列表查询参数

我正在使用 apache URIBuilder为Rest 服务的GET 方法构建查询字符串。

@RequestMapping(value="/remote") 
    public Return getTest(Ordine ordine) throws Exception{
        ...
    }
Run Code Online (Sandbox Code Playgroud)

这是输入对象:

public class Ordine{    
    private List<String> codici;
    //..get...set..
}
Run Code Online (Sandbox Code Playgroud)

我无法理解如何将此字符串列表设置为查询参数。

我试图设置参数两次:

URIBuilder builder = new URIBuilder()
                .setHost("localhost")
                .setPort(8080)
                .setScheme("http")
                .setPath("/remote")
                .setParameter("codici", codicilist.get(0))
                .setParameter("codici", codicilist.get(1));
Run Code Online (Sandbox Code Playgroud)

但是第一个参数会被第二个参数覆盖。然后我尝试在参数名称中附加 []:

URIBuilder builder = new URIBuilder()
                .setHost("localhost")
                .setPort(8080)
                .setScheme("http")
                .setPath("/remote")
                .setParameter("codici[]", codicilist.get(0))
                .setParameter("codici[]", codicilist.get(1));
Run Code Online (Sandbox Code Playgroud)

但它只是以名称“codici[]”发送,第一个参数被覆盖。然后我尝试了一个逗号分隔值:

URIBuilder builder = new URIBuilder()
                .setHost("localhost")
                .setPort(8080)
                .setScheme("http")
                .setPath("/remote")
                .setParameter("codici", String.join(",",codicilist));
Run Code Online (Sandbox Code Playgroud)

但如果失败......我如何设置参数列表?

java rest web-services query-parameters uribuilder

6
推荐指数
2
解决办法
2万
查看次数

URIBuilder setParameter为空格添加+而不是%20

我正在尝试使用URIBuilder构建URL,由于某种原因,我得到+而不是%20的空间。

这是我的代码:

            URI uri=null;
            try {
                uri = ub.setScheme("http")
                        .setHost("myalcoholist.com")
                        .setPath("/drink-management/view-drink-json")
                        .setParameter("flavor",(String)params[1])
                        .setParameter("brand",(String)params[2])
                        .setParameter("company",(String)params[3])
                        .build();
            } catch (URISyntaxException e) {
                Log.e("url", "could not parse url", e);
                return null;
            }
Run Code Online (Sandbox Code Playgroud)

参数:

params[3] = {java.lang.String@831933398520}"contreau france."
params[2] = {java.lang.String@831933398384}"cointreau"
params[1] = {java.lang.String@831933398256}"orange"
Run Code Online (Sandbox Code Playgroud)

结果网址:

"GET /drink-management/view-drink-json?flavor=orange&brand=cointreau&company=contreau+france. HTTP/1.1" 200 538 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)"
Run Code Online (Sandbox Code Playgroud)

我需要更改哪些参数才能正确编码?

谢谢

java decoding uribuilder

5
推荐指数
1
解决办法
1512
查看次数

对于同一主机,new Uri(..) 和 new UriBuilder(..).Uri 有什么区别?

在 Web 应用程序中,我有一个用于身份验证的 AudienceURI。当我从如下代码设置它时:

var audience1 = new UriBuilder("dev.website.com")
                 {
                    Port = 443,
                    Scheme = "https",
                    Path = "/"
                 }.Uri; // Does not work!
Run Code Online (Sandbox Code Playgroud)

这不是工作。

但是当我这样设置时:

var audenice2 = new Uri("https://dev.website.com"); // It works!
Run Code Online (Sandbox Code Playgroud)

效果很好。

有趣的是,以下工作正常!

var audience3 = new Uri(audience1.ToString());  // It works!
Run Code Online (Sandbox Code Playgroud)

知道有什么区别吗?

.net uri wif uribuilder

5
推荐指数
1
解决办法
4100
查看次数

应如何构建 OData URI?

我正在寻找构建 URI,例如https://example.com/data/customers?$top=100.

是否有UriBuilder用于创建 OData URI(即可以$适当处理诸如此类的字符)?

完整信息

我有这样的代码(简化示例):

public Uri CreateMyApiUri(string rootUri, string apiPath, string entity, int pageSize)
{
    var builder = new UriBuilder(rootUri);
    builder.Path = ConcatPathParts(builder.Path, apiPath, entity); //basically string.Join("/", args), plus code to remove superfluous slashes
    var parameters = HttpUtility.ParseQueryString(builder.Query);
    if (pageSize > 0) parameters["$top"] = pageSize.ToString();
    builder.Query = parameters.ToString();
    return builder.Uri; 
}
//called like this
var uri = CreateMyApiUri("https://example.com", "data", "customers", 100);
Run Code Online (Sandbox Code Playgroud)

但是,OData 特殊字符$会被编码为在 URI 中使用%24

我在 GitHub …

c# odata query-string querystringparameter uribuilder

5
推荐指数
1
解决办法
1988
查看次数

如何使用 UriBuilder 构建 URI,而不单独指定方案、主机?

参考:org.springframework.web.util.UriBuilder

我正在用来UriBuilder为端点构建 URI

final String response = myWebClient.get()
   .uri(uriBuilder -> uriBuilder.scheme("https").path("example.com/mypage").path("/{id}.xml").build(id))
   .header(AUTHORIZATION, getAuthorizationHeaderValue(username, password))
   .accept(MediaType.TEXT_XML)
   .retrieve()
   .bodyToMono(String.class)
   .block();
Run Code Online (Sandbox Code Playgroud)

但是,我已经在字符串变量中获得了值https://example.com/mypage(从数据库中获取)。我可以直接使用这个字符串而不是单独指定方案和路径/主机吗?现在我正在手动将主字符串分成单独的部分。

uri uribuilder spring-boot spring-webflux spring-webclient

5
推荐指数
1
解决办法
1万
查看次数

如何使用 URIBuilder 构造带参数的 URI?

如何构建一个URIwww.google.com/p1/p2?what&k1=v1&k2=v2 使用URIBuilder?当我使用 Java 的 URIBuilder.setParameter() 时,我必须传入一个名称和一个值。如何在不使用 URIBuilder.setCustomQuery() 的情况下构建上述 uri?

java parameters uri uribuilder

4
推荐指数
1
解决办法
1万
查看次数