Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用HTTPGET读取和操作文本文件_C#_Integration Testing_.net Core_Asp.net Core Webapi - Fatal编程技术网

C# 使用HTTPGET读取和操作文本文件

C# 使用HTTPGET读取和操作文本文件,c#,integration-testing,.net-core,asp.net-core-webapi,C#,Integration Testing,.net Core,Asp.net Core Webapi,我有一个.NET核心Web API控制器,它获取字符串uri并按如下方式操作:- [HttpGet("/api/TextFileAPI/Get/")] public async Task<JsonResult> Get(string uri) { var client = new HttpClient(); client.DefaultRequestHeaders.Accept.Clear(); var str

我有一个.NET核心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);
    }
返回一个404未找到。如果我将URI更改为普通字符串,我会设法进入控制器,因此看起来URI的格式不正确

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


谢谢你的帮助和时间

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的来源

// 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()));

请求的值是多少?没问题。我在回答中添加了一些更有用的信息。谢谢史蒂文,这很有道理。谢谢你的帮助和时间!
var uri = new Uri("http://www.example.com/download/text/textfile1.txt");
var response = await _client.GetAsync(_request + "Get/" + WebUtility.UrlEncode(uri.ToString()));