Cursor基础使用教程
自从使用了Cursor工作效率飞起
《C# 开发实战1200例》当年就是靠着这本书入门,非常实用【优惠券】
《C#编程宝典》【优惠券】
《C#项目开发全程实录》【优惠券】
# 查看已安装版本
dotnet --list-sdks
# 全局设置默认版本
dotnet new globaljson --sdk-version 8.0.301
File > Preferences > Settings > .NET SDK Path
)C# Dev Kit
(官方智能感知)NuGet Package Manager
(依赖管理)EF Core Power Tools
(数据库逆向工程).vscode/launch.json
中添加:{
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/net8.0/YourProject.dll",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
}
}
]
}
步骤1:生成基础架构
创建一个ASP.NET Core Web API项目,包含以下功能:
- 使用Entity Framework Core + SQLite
- 包含Book模型(Id:int, Title:string, Author:string, ISBN:string)
- 包含BooksController的CRUD端点
- 启用Swagger
Program.cs
关键代码:builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("Default")));
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
步骤2:添加JWT认证
为当前项目添加JWT Bearer认证,要求:
- 生成User模型(Username, PasswordHash)
- 添加AuthController的/login端点
- 在Swagger中显示认证按钮
JwtService.cs
示例:public class JwtService
{
private readonly IConfiguration _config;
public JwtService(IConfiguration config) => _config = config;
public string GenerateToken(User user)
{
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(_config["Jwt:Key"]!));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: _config["Jwt:Issuer"],
audience: _config["Jwt:Audience"],
claims: new[] { new Claim(ClaimTypes.Name, user.Username) },
expires: DateTime.Now.AddHours(1),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}
步骤3:数据验证增强
Book
模型类,输入:为Book模型添加数据注解验证:
- Title长度1-100字符
- ISBN必须符合正则表达式^\d{3}-\d{10}$
- Author不能为空
public class Book
{
public int Id { get; set; }
[Required]
[StringLength(100, MinimumLength = 1)]
public string Title { get; set; }
[Required]
[RegularExpression(@"^\d{3}-\d{10}$",
ErrorMessage = "ISBN格式应为XXX-XXXXXXXXXX")]
public string ISBN { get; set; }
[Required]
public string Author { get; set; }
}
解释此错误并提供修复方案
:CS1061: 'AppDbContext' does not contain a definition for 'Books'...
该错误表明DbContext缺少DbSet属性。解决方案:
1. 在AppDbContext中添加:
public DbSet Books { get; set; }
2. 执行迁移命令:
dotnet ef migrations add AddBooksTable
dotnet ef database update
BookServiceTests.cs
,输入:使用xUnit为BookService编写测试:
- 测试GetAllBooks返回空列表当数据库为空
- 测试CreateBook返回正确ISBN
public class BookServiceTests : IDisposable
{
private readonly AppDbContext _context;
public BookServiceTests()
{
var options = new DbContextOptionsBuilder<AppDbContext>()
.UseSqlite("DataSource=:memory:")
.Options;
_context = new AppDbContext(options);
_context.Database.OpenConnection();
_context.Database.EnsureCreated();
}
[Fact]
public async Task GetAllBooks_ReturnsEmptyList_WhenNoBooks()
{
var service = new BookService(_context);
var result = await service.GetAllBooks();
Assert.Empty(result);
}
}
输入指令示例:
使用Clean Architecture重构当前项目,包含:
- Application层(MediatR + AutoMapper)
- Infrastructure层(EF Core实现)
- API层(Minimal API端点)
AI将生成:
// Application/Books/Queries/GetAllBooks.cs
public record GetAllBooksQuery : IRequest<List<BookDto>>;
public class GetAllBooksHandler : IRequestHandler<GetAllBooksQuery, List<BookDto>>
{
private readonly IApplicationDbContext _context;
private readonly IMapper _mapper;
public GetAllBooksHandler(IApplicationDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public async Task<List<BookDto>> Handle(GetAllBooksQuery request, CancellationToken ct)
{
return _mapper.Map<List<BookDto>>(
await _context.Books.ToListAsync(ct));
}
}
输入:
优化数据访问层:
- 为GetBookById添加AsNoTracking
- 在查询中使用ProjectTo自动映射DTO
- 添加内存缓存策略
AI生成:
public async Task<BookDto> GetBookById(int id)
{
return await _memoryCache.GetOrCreateAsync($"book_{id}", async entry =>
{
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5);
return await _context.Books
.AsNoTracking()
.Where(b => b.Id == id)
.ProjectTo<BookDto>(_mapper.ConfigurationProvider)
.FirstOrDefaultAsync();
});
}
安全规范:
[Authorize(Policy = "RequireAdmin")]
进行细粒度权限控制appsettings.json
中隔离敏感信息,通过dotnet user-secrets
管理dotnet user-secrets init
dotnet user-secrets set "Jwt:Key" "YourSecureKeyHere"
CI/CD集成:
生成GitHub Actions配置用于构建和部署到Azure
,AI将生成:name: .NET Core CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
代码质量管控:
添加SonarQube静态分析配置
,生成:<PropertyGroup>
<SonarQubeExclude>**/Migrations/**SonarQubeExclude>
<SonarQubeTestProject>falseSonarQubeTestProject>
PropertyGroup>
代码可视化:
生成Book类的UML类图
,AI输出PlantUML代码:@startuml
class Book {
+int Id
+string Title
+string Author
+string ISBN
}
@enduml
PlantUML扩展
直接预览SQL转换:
将以下LINQ转换为原生SQL
:context.Books.Where(b => b.Author == "J.R.R. Tolkien").OrderBy(b => b.Title)
SELECT * FROM Books
WHERE Author = 'J.R.R. Tolkien'
ORDER BY Title ASC
多模态开发:
根据此UI生成WPF XAML代码
,AI生成:<Window>
<Grid>
<DataGrid ItemsSource="{Binding Books}">
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Binding="{Binding Title}"/>
DataGrid.Columns>
DataGrid>
Grid>
Window>
以上补充内容覆盖了企业级开发的完整生命周期。实际使用时建议:
cur---sor-context.md
文件记录常用提示词模板推荐图书:
点击链接:《用Cursor玩转AI辅助编程——不写代码也能做软件开发》