我正在使用带有服务的最小 API,该服务调用 .NET Core 6.0 中的存储库。我希望能够将连接字符串传递到我的存储库。
这是我的项目树:
这个想法是程序具有调用服务的端点,然后服务调用存储库。
我正在尝试从存储库获取连接字符串。
在
program.cs
中,我使用的构建器如下:
var builder = WebApplication.CreateBuilder(args);
...
var app = builder.Build();
方法如下:
app.MapPost("/create",
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Roles =
"Administrator")]
(Movie movie, IMovieService service) => Create(movie, service))
.Accepts<Movie>("application/json")
.Produces<Movie>(statusCode: 200, contentType: "application/json");
这些函数使用的方法如下所示:
IResult Create(Movie movie, IMovieService service)
{
var result = service.Create(movie);
return Results.Ok(result);
}
然后服务上有一些方法,如下所示:
namespace MinimalJwt.Services
{
public class MovieService : IMovieService
{
private readonly MovieRepository movieRepository = new MovieRepository();
public Movie Create(Movie movie)
{
movie = movieRepository.CreateNewMovie(movie);
return movie;
}
}
}
最后我试图让我的存储库看起来像现在这样
namespace MinimalJwt.Repositories
{
public class MovieRepository : IMovie
{
public IConfiguration _configuration;
public MovieRepository(IConfiguration config)
{
this._configuration = config;
}
public IList<Movie> GetMovies()
{
List<Movie> movies = new List<Movie>();
using (SqlConnection con = new SqlConnection(_configuration.GetConnectionString("MoviesContextDb")))
{
SqlCommand cmd = new SqlCommand("spGetAllMovies", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
var movie = new Movie()
{
Id = Convert.ToInt32(rdr["Id"]),
Title = rdr["Title"].ToString(),
Description = rdr["Description"].ToString(),
Rating = Convert.ToDouble(rdr["Rating"])
};
movies.Add(movie);
}
return (movies);
}
}
}
这个想法是让存储库能够使用
appsettings.json
内部的连接字符串。
非常感谢任何帮助。
提前致谢。
您的 appsettings.json 文件应该如下所示。那么应该可以工作了。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"ConnectionStrings": {
"MoviesContextDb": "Connection String details"
}
}