无法 return 从网络 api 键入 Microsoft.Azure.Documents.Document

Unable to return type Microsoft.Azure.Documents.Document from web api

我正在使用 Azure Document DB,可以使用下面的代码成功创建一个对象。但是我无法 return 将创建的对象返回给客户端。尽管代码达到了行 return Ok(doc);在 Fiddler 和 Postman 中看到的响应总是空的。

控制器

[HttpPost]
    [Route("")]
    public IHttpActionResult CreateNewApplication(dynamic data)
    {
        if (data == null)
        {
            return BadRequest("data was empty");
        }

        try
        {
            var doc = _applicationResource.Save(data);
            return Ok(doc);
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }

资源

 public async Task<Document> Save(dynamic application)
    {
        Document created;

        using (Client)
        {
            application.id = Guid.NewGuid();
            var database = await RetrieveOrCreateDatabaseAsync(Database);
            var collection = await RetrieveOrCreateCollectionAsync(database.SelfLink, CollectionName);

            //persist the documents in DocumentDB
            created = await Client.CreateDocumentAsync(collection.SelfLink, application);

        }

        Debug.WriteLine("Application saved with ID {0} resourceId {1}", created.Id, created.ResourceId);

        return created;

    }

请注意,我是使用异步/等待的新手。我认为 return 值应该是任务的类型,即任务。那就是说我已经尝试 return 两者都无济于事。

首先,当您 await 为一个 return 是 Task<T> 的函数时,您会得到一个 T 类型的值。这就是为什么你把 await 这个词放在函数调用前面的原因。

其次,使 Web API 非常易于使用的原因是您不需要在 HTTP 协议级别上工作,并且 return 一个 IHttpActionResult 是手工创建的:您应该 return 直接是你想要的值,没有 "wrapping" 它在任何 HTTP 工件中。

如果您的操作方法可以 return 不同类型的值,请将 return 类型声明为 object。但通常你总是 return 一个相同类型的对象,在你的情况下 Document ,并且在出现错误的情况下,而不是 returning 其他类型的值,你可以抛出一个 HttpResponseException。来回查看更多信息:Best practice to return errors in ASP.NET Web API