IGDB V3请求

时间:2019-01-08 15:38:50

标签: c# ajax api webrequest

有人知道如何从版本3开始使用Internet游戏数据库API正确搜索游戏吗?我正在尝试使用IGDB进行简单的游戏搜索。对于每个与搜索字词匹配的游戏,我想检索该游戏的名称,类型,开发商和发行商,初始发行日期以及封面的URL。通过一些谷歌搜索,我已经通过旧的URL参数使它工作了,但是它们的末端似乎有所改变,而那些不再起作用。版本3的文档说使用Apicalypse将想要的字段发送回Web请求的正文中,但是我一辈子都无法弄清楚该如何做。我正在使用AJAX将搜索字词发送到控制器,然后通过JSON对象将结果发送回去。无论我使用的字段语法如何,每次都会收到400 Bad Request错误。该文档说,使用URL参数仍然可以使用,但不能使用。这是我的控制器代码。

[HttpPost]
    [WebMethod]
    public JsonResult LookUpGames(string search)
    {
        string url = "https://api-v3.igdb.com/games/?search=" + search
            + "&fields=name,genres,involved_companies,first_release_date,cover";
        HttpWebRequest gameRequest = (HttpWebRequest)WebRequest.Create(url);
        gameRequest.Accept = "application/json";
        gameRequest.Headers.Add("user-key", "[MYUSERKEY]");
        WebResponse gameResponse = (HttpWebResponse)gameRequest.GetResponse();
        string responseString = new StreamReader(gameResponse.GetResponseStream()).ReadToEnd();
        return Json(new { result = responseString });
    }

更新:谢谢你的指导,杰克。我现在用以下代码访问服务器。

HttpResponse<JsonResult> jsonResponse = Unirest.post("https://api-v3.igdb.com/games")
                .header("user-key", "[MYUSERKEY]")
                .header("Accept", "application/json")
                .body("fields name,genres,platforms,involved_companies,cover").asJson<JsonResult>();
JsonResult jsonResult = Json(new { result = jsonResponse });
            return jsonResult;

显然C#中没有JsonNode,所以我尝试了JsonResult,而.asJson()似乎是.asJson()。我只是摆弄它直到它起作用。但是我仍然没有得到清单。我收到400错误的请求错误。因此,即使采用这种新格式,它仍然不喜欢我提供的字段。根据文档中的结构,我提供的字段实际上在Game端点中。所以我不知道有什么问题。还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

我决定再次尝试查询方法,现在它以某种方式起作用。这是我的控制器方法。不知道哪些调整使它再次起作用,但是确实可以。

[HttpPost]
[WebMethod]
public JsonResult LookUpGames(string search)
{
    string url = "https://api-v3.igdb.com/games?search=" + search + 
        "&fields=name,genres.name,platforms.name,involved_companies.*, involved_companies.company.*,first_release_date,cover.url";
    HttpWebRequest gameRequest = (HttpWebRequest)WebRequest.Create(url);
    gameRequest.Accept = "application/json";
    gameRequest.Headers.Add("user-key", "[MYUSERKEY]");
    WebResponse gameResponse = gameRequest.GetResponse();
    StreamReader sr = new StreamReader(gameResponse.GetResponseStream());
    string responseString = sr.ReadToEnd();
    sr.Close();
    JsonResult jsonResult = Json(new { result = responseString });
    return jsonResult;
}