ASP.NET چیست؟ آموزش کامل و جامع ASP.NET
فهرست مطالب
ASP.NET چیست؟
ASP.NET یک فریمورک متنباز و قدرتمند برای ساخت برنامههای تحت وب مدرن است که توسط مایکروسافت توسعه داده شده است. این فریمورک امکان ساخت برنامههای وب، APIها و سرویسهای مبتنی بر وب را فراهم میکند.
using Microsoft.AspNetCore.Mvc;
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
ViewData["Message"] = "صفحه درباره ما";
return View();
}
}
تاریخچه ASP.NET
ASP.NET در سال 2002 به عنوان جانشین ASP کلاسیک معرفی شد. از آن زمان تاکنون، این فریمورک تکامل یافته و نسخههای مختلفی از آن منتشر شده است.
معماری ASP.NET
معماری ASP.NET بر اساس مفهوم ماژولار و لایهبندی شده طراحی شده است. این معماری شامل چندین لایه اصلی است که هر کدام وظایف مشخصی را بر عهده دارند.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<ApplicationDbContext>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
ویژگیهای اصلی ASP.NET
۱. یکپارچگی با .NET
ASP.NET به طور کامل با اکوسیستم .NET یکپارچه است و از تمام قابلیتهای آن بهره میبرد.
۲. امنیت پیشرفته
سیستم امنیتی قوی شامل احراز هویت و مجوزدهی встроенный.
۳. عملکرد بالا
بهینهسازی شده برای سرعت و کارایی با پشتیبانی از کشکردن و کامپایل JIT.
فریمورکهای ASP.NET
ASP.NET دارای چندین فریمورک اصلی است که هر کدام برای نیازهای خاصی طراحی شدهاند:
ASP.NET Core MVC
فریمورک مدرن برای ساخت برنامههای وب با استفاده از الگوی MVC.
ASP.NET Core Web API
برای ساخت RESTful APIها و سرویسهای وب.
Blazor
فریمورک جدید برای ساخت برنامههای تعاملی با استفاده از C# به جای JavaScript.
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private readonly IProductService _productService;
public ProductsController(IProductService productService)
{
_productService = productService;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<Product>>> GetProducts()
{
var products = await _productService.GetAllProductsAsync();
return Ok(products);
}
}
الگوی MVC در ASP.NET
الگوی MVC یکی از پرکاربردترین الگوهای طراحی در ASP.NET است که برنامه را به سه بخش اصلی تقسیم میکند:
// Model
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
// Controller
public class ProductController : Controller
{
private readonly IProductRepository _repository;
public ProductController(IProductRepository repository)
{
_repository = repository;
}
public IActionResult Index()
{
var products = _repository.GetAll();
return View(products);
}
}
// View (Products/Index.cshtml)
@model IEnumerable<Product>
<h1>محصولات</h1>
@foreach (var product in Model)
{
<div>
<h2>@product.Name</h2>
<p>قیمت: @product.Price</p>
</div>
}
نصب و راهاندازی ASP.NET
برای شروع کار با ASP.NET، نیاز به نصب .NET SDK و یک محیط توسعه مناسب دارید.
# نصب .NET SDK
dotnet --version
# ایجاد پروژه جدید
dotnet new webapp -n MyFirstApp
# اجرای پروژه
cd MyFirstApp
dotnet run
کار با پایگاه داده در ASP.NET
Entity Framework Core، ORM اصلی برای کار با پایگاه داده در ASP.NET است.
public class ApplicationDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlServer("Connection String");
}
}
// استفاده در سرویس
public class ProductService
{
private readonly ApplicationDbContext _context;
public async Task<List<Product>> GetAllProducts()
{
return await _context.Products.ToListAsync();
}
}
امنیت در ASP.NET
ASP.NET دارای مکانیزمهای امنیتی پیشرفتهای است که شامل:
[Authorize]
public class SecureController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
[HttpPost]
public async Task<IActionResult> Login(LoginModel model)
{
var user = await _userManager.FindByEmailAsync(model.Email);
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
{
// Login logic
}
return Unauthorized();
}
}
استقرار برنامههای ASP.NET
استقرار (Deployment) برنامههای ASP.NET میتواند در محیطهای مختلف انجام شود. در اینجا با روشهای اصلی آشنا میشویم.
استقرار در IIS
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\MyApp.dll" stdoutLogEnabled="false" hostingModel="inprocess" />
</system.webServer>
</configuration>
استقرار در Docker
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MyApp.csproj", "./"]
RUN dotnet restore "MyApp.csproj"
COPY . .
RUN dotnet build "MyApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
بهترین شیوههای کدنویسی ASP.NET
رعایت اصول و الگوهای برنامهنویسی تمیز در ASP.NET بسیار مهم است.
۱. اصول SOLID
// خوب
public class UserService
{
private readonly IUserRepository _userRepository;
private readonly IEmailService _emailService;
public UserService(IUserRepository userRepository, IEmailService emailService)
{
_userRepository = userRepository;
_emailService = emailService;
}
public async Task RegisterUser(UserDto userDto)
{
var user = await _userRepository.Create(userDto);
await _emailService.SendWelcomeEmail(user.Email);
}
}
// بد
public class UserService
{
public async Task RegisterUser(UserDto userDto)
{
// مستقیم با دیتابیس کار میکند
using (var context = new DbContext())
{
// کد ایمیل و دیتابیس با هم
}
}
}
۲. الگوهای طراحی متداول
public interface IRepository<T>
{
Task<T> GetById(int id);
Task<IEnumerable<T>> GetAll();
Task Add(T entity);
Task Update(T entity);
Task Delete(int id);
}
public class Repository<T> : IRepository<T> where T : class
{
private readonly ApplicationDbContext _context;
private readonly DbSet<T> _dbSet;
public Repository(ApplicationDbContext context)
{
_context = context;
_dbSet = context.Set<T>();
}
// پیادهسازی متدها
}
ابزارهای توسعه ASP.NET
محیطهای توسعه
– Visual Studio 2022
– Visual Studio Code با افزونه C#
– JetBrains Rider
ابزارهای تست و دیباگ
public class UserServiceTests
{
private readonly IUserService _userService;
private readonly Mock<IUserRepository> _userRepositoryMock;
public UserServiceTests()
{
_userRepositoryMock = new Mock<IUserRepository>();
_userService = new UserService(_userRepositoryMock.Object);
}
[Fact]
public async Task GetUser_WithValidId_ReturnsUser()
{
// Arrange
var userId = 1;
var expectedUser = new User { Id = userId, Name = "Test User" };
_userRepositoryMock.Setup(x => x.GetById(userId))
.ReturnsAsync(expectedUser);
// Act
var result = await _userService.GetUser(userId);
// Assert
Assert.Equal(expectedUser.Id, result.Id);
Assert.Equal(expectedUser.Name, result.Name);
}
}
ابزارهای مدیریت پکیج
– NuGet Package Manager
– dotnet CLI
– Azure DevOps Artifacts
جمعبندی و آینده ASP.NET
ASP.NET با پشتیبانی قوی مایکروسافت و جامعه بزرگ توسعهدهندگان، همچنان به تکامل خود ادامه میدهد. نسخههای جدید با تمرکز بر:
- بهبود عملکرد و مقیاسپذیری
- یکپارچگی بهتر با کانتینرها و میکروسرویسها
- پشتیبانی از تکنولوژیهای مدرن وب
- بهبود تجربه توسعهدهندگان