首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在.Net 6 WebAPI中添加CosmosDB?

如何在.Net 6 WebAPI中添加CosmosDB?
EN

Stack Overflow用户
提问于 2021-11-07 11:52:46
回答 2查看 909关注 0票数 3

我想在.Net 6 WebAPI中使用CosmosDB SQL-API。是否也有AddCosmos()方法可用于在不同的服务中注入客户端,或者是否真的需要使用接口来实现我自己的cosmos-service以将客户端注入我自己的服务类?

EN

回答 2

Stack Overflow用户

发布于 2021-11-08 07:42:14

在.Net 6.0中,您应该像下面的示例代码一样在Program.cs文件中添加CosmosClient

代码语言:javascript
复制
using Microsoft.Azure.Cosmos;
using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new() { Title = "WebApplication1", Version = "v1" });
}); 
builder.Services.AddHttpClient();
builder.Services.AddSingleton<CosmosClient>(serviceProvider =>
{
    //IHttpClientFactory httpClientFactory = serviceProvider.GetRequiredService<IHttpClientFactory>();

    //CosmosClientOptions cosmosClientOptions = new CosmosClientOptions
    //{
        //HttpClientFactory = httpClientFactory.CreateClient,
        //ConnectionMode = ConnectionMode.Gateway
    //};

    return new CosmosClient("<cosmosdb_connectionstring>");
    // sample code
    //return new CosmosClient("AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");//, cosmosClientOptions);
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (builder.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApplication1 v1"));
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

然后,您可以将 CosmosClient 注入到您的控制器。

代码语言:javascript
复制
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Cosmos;
using Microsoft.WindowsAzure.Storage.Table;

namespace WebApplication1.Controllers;
[ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
{
    public CosmosClient _client;
    private readonly ILogger<WeatherForecastController> _logger;

    public HomeController(ILogger<WeatherForecastController> logger, CosmosClient client)
    {
        _logger = logger;
        _client = client;
    }
    [HttpGet]
    public async Task<string> getvalue() {
        string dbname = "test";
        string containername = "container1";
        Database database = await _client.CreateDatabaseIfNotExistsAsync(dbname);
        Container container = database.GetContainer(containername);
        var query = container.GetItemQueryIterator<Test>("SELECT c.id FROM c");
        string ss = string.Empty;
        while (query.HasMoreResults)
        {
            FeedResponse<Test> result = await query.ReadNextAsync();
            foreach (var item in result) {
                ss += item.id;
            }
        }
        return ss;
    }
    public class Test : TableEntity { 
        public int id { get; set; }
    }
}

测试结果

在我的宇宙数据库中的价值。

通过api获取值

票数 5
EN

Stack Overflow用户

发布于 2021-12-16 10:48:49

这就是我所做的。

program.cs

代码语言:javascript
复制
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

//Start adding Congiguration for cosmos db
static async Task<CosmosDbService> InitializeCosmosClientInstanceAsync(IConfigurationSection configurationSection)
{
    var databaseName = configurationSection["DatabaseName"];
    var containerName = configurationSection["ContainerName"];
    var account = configurationSection["Account"];
    var key = configurationSection["Key"];
    var client = new Microsoft.Azure.Cosmos.CosmosClient(account, key);
    var database = await client.CreateDatabaseIfNotExistsAsync(databaseName);
    await database.Database.CreateContainerIfNotExistsAsync(containerName, "/id");
    var cosmosDbService = new CosmosDbService(client, databaseName, containerName);
    return cosmosDbService;
}

var section = builder.Configuration.GetSection("CosmosDb");
builder.Services.AddSingleton<ICosmosDbService>(
    InitializeCosmosClientInstanceAsync(section).GetAwaiter().GetResult());

//end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69872189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档