如何让用户在ASP.NET MVC 5应用程序中使用TMDB API(电影DB)搜索电影并返回JSON结果。
使用我的Personel API键在VB外工作示例,并在所有电影中都返回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();
}
}
我将代码粘贴到异步动作Movieearch()中,但现在该怎么做。
您必须对json字符串进行验证,它们以 responseData
的形式返回您,例如 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);
检查它们实际返回的是什么,因为响应可以包含一个电影对象,而是可以包含列表,然后您必须像这样编写代码:
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"})