我试图从MVC Controller调用自定义WebAPI方法,但我无法实现它。它在mvcontroller上抛出错误。
MVCController.cs
public List<Task> GetTasks()
{
string mystr = "http://localhost:55146/api/Tasks/GetTasks";
HttpClient httpClient = new HttpClient();
var response = httpClient.GetStringAsync(mystr);
var camelCaseFormatter = new JsonSerializerSettings();
camelCaseFormatter.ContractResolver = new CamelCasePropertyNamesContractResolver();
return JsonConvert.DeserializeObjectAsync<List<Task>>(response.Result).Result;
}
WebAPI方法
public IQueryable<Task> GetTasks()
{
return db.Tasks;
}
答案 0 :(得分:1)
您不能也不应该从api操作返回数据库模型对象,这可能与错误有关(发布错误!)。您应该使用数据传输对象(DTO)从操作中返回数据。基本上这些类与DB类具有或多或少相同的属性,然后使用Automapper在返回之前将一个对象映射到另一个对象。返回IQueryable也是愚蠢的,因为你不能通过webapi查询对象,你会想要返回一个List甚至更好的IEnumerable,IQueryable应该实现IEnumerable。
答案 1 :(得分:0)
为什么要从MVC控制器返回Task对象的集合,而不是ActionResult类?你的API方法不应该返回JSON,而你的MVC方法返回一个ActionResult来查看任务列表吗?
在任何情况下,您都应该检查Task(在List<Task>
中)是否没有引用System.Threading.Tasks.Task
类型,该类型用于执行异步方法。
此外,如上所述,有关错误消息的更多信息将会有所帮助。