-1

json リクエストのリクエスト URL を作成しようとしましたが、404 エラーが発生しました。これは、いくつかのスレッドを読んだ後にまとめたコードです。誰でも助けることができますか?

var apiKey = "123456";
var Query = "some search";
var Location = "San Jose, CA";
var Sort = "1";
var SearchRadius = "100";

var values = HttpUtility.ParseQueryString(string.Empty);

values["k"] = apiKey;
values["q"] = Query;
values["l"] = Location;
values["sort"] = Sort;
values["radius"] = SearchRadius;

string url = "http://api.website.com/api" + values.toString();

ここでエラーが発生します。client.DownloadString() に URL を渡した後

var client = new WebClient();
var json = client.DownloadString(url);
var search = Json.Decode(json);
4

2 に答える 2

2

あなたのコードは無効な URL を作成しています:

http://api.website.com/apik=123456&q=some+search&l=San+Jose%2c+CA&sort=1&radius=100

部分に注意してください/apik=123456

var apiKey = "123456";
var Query = "some search";
var Location = "San Jose, CA";
var Sort = "1";
var SearchRadius = "100";

// Build a List of the querystring parameters (this could optionally also have a .ToLookup(qs => qs.key, qs => qs.value) call)
var querystringParams = new [] {
  new { key = "k", value = apiKey },
  new { key = "q", value = Query },
  new { key = "l", value = Location },
  new { key="sort", value = Sort },
  new { key = "radius", value = SearchRadius }
};

// format each querystring parameter, and ensure its value is encoded
var encodedQueryStringParams = querystringParams.Select (p => string.Format("{0}={1}", p.key, HttpUtility.UrlEncode(p.value)));

// Construct a strongly-typed Uri, with the querystring parameters appended
var url = new UriBuilder("http://api.website.com/api");
url.Query = string.Join("&", encodedQueryStringParams);

このアプローチは、UrlEncoded クエリ文字列パラメーターを使用して、厳密に型指定された有効な Uri インスタンスを構築します。複数の場所で使用する必要がある場合は、ヘルパー メソッドに簡単に組み込むことができます。

于 2013-08-26T20:20:06.647 に答える
0

UriBuilder クラスを使用します。結果の URI が正しくフォーマットされていることを確認します。

于 2013-08-26T20:27:17.493 に答える