我正在尝试使用以下包添加一个cosmosdb文档:
https://github.com/Elfocrash/Cosmonaut
api控制器是这样的:
[HttpPut]
public async Task<IHttpActionResult> PutTenant([ModelBinder(typeof(TenantModelBinder))] Tenant tenant)
{
//var provider = new MultipartMemoryStreamProvider();
//var contentType = "";
//var content = new byte[0];
//await base.Request.Content.ReadAsMultipartAsync(provider);
//if (provider.Contents.Count > 0)
//{
// contentType = provider.Contents[0].Headers.ContentType.MediaType;
// content = await provider.Contents[0].ReadAsByteArrayAsync();
//}
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["AzureStorageKey"].ToString());
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference(ConfigurationManager.AppSettings["certificatesContainer"].ToString());
// Retrieve reference to a blob named "myblob".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob");
// Create or overwrite the "myblob" blob with contents from a local file.
//blockBlob.Properties.ContentType = tenant.ContentType;
MemoryStream stream = new MemoryStream(tenant.CertificateFile);
blockBlob.UploadFromStream(stream);
var tenantStore = CosmosStoreFactory.CreateForEntity<Tenant>();
tenant.CertificatePath = blockBlob.Uri;
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var added = await tenantStore.AddAsync(tenant);
return StatusCode(HttpStatusCode.NoContent);
}
然而,我得到了这个错误:
Unable to resolve iD for entity of type Tenant
我的租户类别:
public class Tenant
{
public string TenantId { get; set; }
public string TenantUrl { get; set; }
public Uri CertificatePath { get; set; }
public string CertificatePassword { get; set; }
public byte[] CertificateFile { get; set; }
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}
如Github Readme页面在限制部分中所述
由于Cosmosdb的内部id属性的工作方式,有一个强制性的限制。不能有名为Id的属性或属性为[JsonProperty("Id"(]的属性而不使用字符串。宇宙本我需要以某种方式存在于你的实体模型中。因此,如果它不是实体的一部分,您可以只实现ICosmosEntity接口或扩展CosmosEntity类。
在您的案例中,建议使用[JsonProperty("id")]
属性装饰TenantId
。