无法 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
我正在使用 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