【问题标题】:reading and manipulating a textfile with HTTPGET使用 HTTPGET 读取和操作文本文件
【发布时间】:2017-04-21 10:53:20
【问题描述】:

我有一个 .NET Core Web API 控制器,它正在获取字符串 uri 并按如下方式操作它:-

    [HttpGet("/api/TextFileAPI/Get/")]
    public async Task<JsonResult> Get(string uri)
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Clear();

        var stringTask = await client.GetStringAsync(uri);

        return Json(stringTask);
    }

现在我正在尝试为此创建一个测试,以确保我得到 200 回复并且一切正常,但是我似乎无法正确传递 URL。我目前的代码如下:-

    [Test]
    public async Task Get_EnsureSuccessStatusCode_TextFileAPIController()
    {
        var uri = new Uri("http://www.example.com/download/text/textfile1.txt");

        var response = await _client.GetAsync(_request + "Get/" + uri);
        response.EnsureSuccessStatusCode();


        Assert.IsTrue(true);
    }

返回 404 未找到。如果我将 URI 更改为普通字符串,我会设法进入我的控制器,所以看起来 uri 的格式不正确。

有人知道如何正确传递 URI 吗?

感谢您的帮助和时间!

【问题讨论】:

  • _request的值是多少?

标签: c# integration-testing .net-core asp.net-core-webapi


【解决方案1】:

uri 值作为查询字符串参数传递,而不是将其附加到路径中。

var uri = new Uri("http://www.example.com/download/text/textfile1.txt");
var response = await _client.GetAsync(_request + "Get?uri=" + uri);

之所以必须将其作为查询字符串参数传递,是因为uri 不是路由的一部分。如果您想继续传递uri 作为路径段,则必须将其添加到您的路线中。否则,您的 URL 将不匹配任何路由。这就解释了 404 Not Found 的来源。

// matches /api/TextFileAPI/Get/http%3A%2F%2Fwww.example.com%2Fdownload%2Ftext%2Ftextfile1.txt
[HttpGet("/api/TextFileAPI/Get/{uri}")]

使用这种方法,您必须确保 {uri} 路径段中的任何正斜杠都经过 URL 编码。

var uri = new Uri("http://www.example.com/download/text/textfile1.txt");
var response = await _client.GetAsync(_request + "Get/" + WebUtility.UrlEncode(uri.ToString()));

【讨论】:

  • 没问题。我在答案中添加了一些更有用的信息。
  • 谢谢史蒂文,这很有意义。感谢您的帮助和时间!
猜你喜欢
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多