【问题标题】:Webclient doesnt like UrlEncoded slash. How to make it work?Webclient 不喜欢 UrlEncoded 斜线。如何让它发挥作用?
【发布时间】:2022-01-07 06:55:02
【问题描述】:

我正在尝试使用 .net 2.0 网络客户端将 URL 传递给 API(无法升级)。仅当编码值中没有斜杠时,webclient 调用才有效。知道为什么会失败以及如何使其工作吗?

using System.Net;
using System.Text;
using System.Web;

namespace ConsoleAppWebClient
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var client = new WebClient())
            {
                client.Encoding = Encoding.UTF8;
                client.Headers[HttpRequestHeader.Accept] = "application/xml";
                var requestUrl = HttpUtility.UrlEncode("https://www.somewebsite.com");
                var stringResult = client.DownloadString("https://localhost:12345/api/getstuff/" + requestUrl);
            }
        }
    }
}

上面的不行,下面的就好了

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Xml.Serialization;
using System.Web;

namespace ConsoleAppWebClient
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var client = new WebClient())
            {
                client.Encoding = Encoding.UTF8;
                client.Headers[HttpRequestHeader.Accept] = "application/xml";
                var requestUrl = HttpUtility.UrlEncode("https:www.somewebsite.com");
                var stringResult = client.DownloadString("https://localhost:12345/api/getstuff/" + requestUrl);
            }
        }
    }
}

【问题讨论】:

    标签: c# asp.net .net webclient .net-2.0


    【解决方案1】:

    看起来requestUrl 是一个查询参数,但您将它添加到 URL 的路径中。

    结果是

    https://localhost:12345/api/getstuff/https%3A%2F%2Fwww.somewebsite.com

    “%”是一个不安全的字符,会导致不可预知的结果。

    相反,尝试将其设为查询字符串参数:

    var requestUrl = HttpUtility.UrlEncode("https:www.somewebsite.com");
    var stringResult = client.DownloadString(
        "https://localhost:12345/api/getstuff/?requestUrl=" + requestUrl);
    

    现在 URL 编码的参数在查询字符串而不是路径中应该没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2015-10-02
      • 2019-08-13
      • 2022-01-02
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多