ASP.NET MVC 5 从 TMDB API 获得 JSON 结果
ASP.NET MVC 5 getting a JSON result from TMDB API
如何让用户在 ASP.NET MVC 5 应用程序和 return JSON 中使用 TMDB API (The Movie Db) 搜索电影结果。
VB 之外的工作示例,使用我的个人 api 键和 returning json 结果,所有电影都包含字符串 "mission":
http://api.themoviedb.org/3/search/movie?api_key=841c..&query=mission
文档 (http://docs.themoviedb.apiary.io/#reference/search/searchmovie) 建议对 C# 使用以下代码:
var baseAddress = new Uri("http://api.themoviedb.org/3/");
using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("accept", "application/json");
using(var response = await httpClient.GetAsync("search/movie"))
{
string responseData = await response.Content.ReadAsStringAsync();
}
}
我将代码粘贴到异步操作 MovieSearch() 中,但不知道现在该做什么。
您必须将 JSON 字符串反序列化为 return 您作为 responseData
的 c# 类型 Movie
。对于反序列化,您可以使用像 JSON.NET 这样的库,然后这样写:
class Movie
{
public string Name{ get; set;}
public decimal Rating{ get; set;}
}
string output = "{ "Name": "The Matrix", "Rating": "4.0"}"
Movie deserializedMovie = JsonConvert.DeserializeObject<Movie>(responseData);
检查它们实际上是什么 return 导致响应不能包含单个 Movie 对象,但可以包含一个列表,那么您必须像这样编写代码:
List<Movie> movies= JsonConvert.DeserializeObject<List<Movie>>(responseData);
希望对您有所帮助:)
感谢 Aminuls 的帮助我找到了一个很好的解决方案:
// SearchMovie method
public async Task MovieSearch(string search)
{
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var baseAddress = new Uri("http://api.themoviedb.org/3/");
using (var httpClient = new HttpClient { BaseAddress = baseAddress })
{
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("accept", "application/json");
// api_key can be requestred on TMDB website
using (var response = await httpClient.GetAsync("search/movie?api_key=941c...&query=" + search))
{
string responseData = await response.Content.ReadAsStringAsync();
var model = JsonConvert.DeserializeObject<RootObject>(responseData);
foreach (var result in model.results)
{
// All movies
// System.Diagnostics.Debug.WriteLine(result.title);
}
}
}
}
// Generated model from json2csharp.com
public class Result
{
public bool adult { get; set; }
public string backdrop_path { get; set; }
public int id { get; set; }
public string original_title { get; set; }
public string release_date { get; set; }
public string poster_path { get; set; }
public double popularity { get; set; }
public string title { get; set; }
public bool video { get; set; }
public double vote_average { get; set; }
public int vote_count { get; set; }
}
public class RootObject
{
public int page { get; set; }
public List<Result> results { get; set; }
public int total_pages { get; set; }
public int total_results { get; set; }
}
// Examle of search functionaly in View
@Html.ActionLink("Search movie", "MovieSearch", new { search = "mission"})
如何让用户在 ASP.NET MVC 5 应用程序和 return JSON 中使用 TMDB API (The Movie Db) 搜索电影结果。
VB 之外的工作示例,使用我的个人 api 键和 returning json 结果,所有电影都包含字符串 "mission":
http://api.themoviedb.org/3/search/movie?api_key=841c..&query=mission
文档 (http://docs.themoviedb.apiary.io/#reference/search/searchmovie) 建议对 C# 使用以下代码:
var baseAddress = new Uri("http://api.themoviedb.org/3/");
using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("accept", "application/json");
using(var response = await httpClient.GetAsync("search/movie"))
{
string responseData = await response.Content.ReadAsStringAsync();
}
}
我将代码粘贴到异步操作 MovieSearch() 中,但不知道现在该做什么。
您必须将 JSON 字符串反序列化为 return 您作为 responseData
的 c# 类型 Movie
。对于反序列化,您可以使用像 JSON.NET 这样的库,然后这样写:
class Movie
{
public string Name{ get; set;}
public decimal Rating{ get; set;}
}
string output = "{ "Name": "The Matrix", "Rating": "4.0"}"
Movie deserializedMovie = JsonConvert.DeserializeObject<Movie>(responseData);
检查它们实际上是什么 return 导致响应不能包含单个 Movie 对象,但可以包含一个列表,那么您必须像这样编写代码:
List<Movie> movies= JsonConvert.DeserializeObject<List<Movie>>(responseData);
希望对您有所帮助:)
感谢 Aminuls 的帮助我找到了一个很好的解决方案:
// SearchMovie method
public async Task MovieSearch(string search)
{
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var baseAddress = new Uri("http://api.themoviedb.org/3/");
using (var httpClient = new HttpClient { BaseAddress = baseAddress })
{
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("accept", "application/json");
// api_key can be requestred on TMDB website
using (var response = await httpClient.GetAsync("search/movie?api_key=941c...&query=" + search))
{
string responseData = await response.Content.ReadAsStringAsync();
var model = JsonConvert.DeserializeObject<RootObject>(responseData);
foreach (var result in model.results)
{
// All movies
// System.Diagnostics.Debug.WriteLine(result.title);
}
}
}
}
// Generated model from json2csharp.com
public class Result
{
public bool adult { get; set; }
public string backdrop_path { get; set; }
public int id { get; set; }
public string original_title { get; set; }
public string release_date { get; set; }
public string poster_path { get; set; }
public double popularity { get; set; }
public string title { get; set; }
public bool video { get; set; }
public double vote_average { get; set; }
public int vote_count { get; set; }
}
public class RootObject
{
public int page { get; set; }
public List<Result> results { get; set; }
public int total_pages { get; set; }
public int total_results { get; set; }
}
// Examle of search functionaly in View
@Html.ActionLink("Search movie", "MovieSearch", new { search = "mission"})