2017-04-21 7 views
2

私は、文字列のURIを取得し、次のように操作している.NETのコアウェブAPIコントローラを持ってテキストファイルを操作する: - 今、私はこのためのテストを作成しようとしています読書とHTTPGET

[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を正しく渡すことができますか?

ご協力いただきありがとうございます。

+0

'_request'の値は何ですか? –

答えて

3

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())); 
+0

スティーブンさん、ありがとうございました! – Johann

+0

問題ありません。私は私の答えにいくつかのより有用な情報を追加しました。 –

+0

ありがとうSteven、それはたくさんの意味があります。あなたの助けと時間をありがとう! – Johann