如何从MVC控制器调用自定义WebAPi方法

时间:2015-05-13 02:54:59

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

我试图从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;
    }

2 个答案:

答案 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类型,该类型用于执行异步方法。

此外,如上所述,有关错误消息的更多信息将会有所帮助。