ASP.NET Web API'sinden ASP.NET Core'a geçiş
ASP.NET Core, ASP.NET 4.x'in MVC ve Web API uygulama modellerini ASP.NET Core MVC olarak bilinen tek bir programlama modelinde birleştirir.
Bu makalede, ASP.NET Web API 2 ile Çalışmaya Başlama bölümünde oluşturulan Products denetleyicisini ASP.NET Core'a geçirme işlemleri gösterilmektedir.
Ön koşullar
- Visual Studio 2022 ile ASP.NET ve web geliştirme iş yükü.
- .NET 6.0 SDK
Yeni ASP.NET Core Web API projesini oluşturma
- Dosya menüsünden Yeni Proje'yi> seçin.
- Arama kutusuna Web API'sini girin.
- ASP.NET Core Web API şablonunu seçin ve İleri'yi seçin.
- Yeni projenizi yapılandırın iletişim kutusunda projeye ProductsCore adını verin ve İleri'yi seçin.
- Ek bilgi iletişim kutusunda:
- Framework'ün .NET 6.0 (Uzun vadeli destek) olduğunu onaylayın.
- Denetleyicileri kullan (en az API kullanmak için işaretini kaldırın) onay kutusunun işaretli olduğunu onaylayın.
- OpenAPI desteğini etkinleştir seçeneğinin işaretini kaldırın.
- Create'u seçin.
WeatherForecast şablon dosyalarını kaldırma
WeatherForecast.cs
VeControllers/WeatherForecastController.cs
örnek dosyalarını yeni ProductsCore projesinden kaldırın.- Properties\launch Ayarlar.json dosyasını açın.
- özelliklerini olarak
weatherforcast
productscore
değiştirinlaunchUrl
.
ASP.NET Core Web API'sinin yapılandırması
ASP.NET Core, App_Start klasörünü veya Global.asax dosyasını kullanmaz. Web.config dosyası yayımlama zamanında eklenir. Daha fazla bilgi için bkz . web.config dosyası.
Program.cs
dosyası:
- Global.asax'ın yerini alır.
- Tüm uygulama başlatma görevlerini işler.
Daha fazla bilgi için, bkz. ASP.NET Core'de uygulama başlatma.
Aşağıda, ASP.NET Core Program.cs
dosyasındaki uygulama başlatma kodu gösterilmektedir:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Ürün modelini kopyalama
- Çözüm Gezgini'da projeye sağ tıklayın. Yeni Klasör Ekle'yi>seçin. Klasöre Models adını verin.
- Modeller klasörüne sağ tıklayın. Sınıf Ekle'yi>seçin. Sınıfı Product olarak adlandırın ve Ekle'yi seçin.
- Şablon modeli kodunu aşağıdakilerle değiştirin:
namespace ProductsCore.Models
{
public class Product
{
public int Id { get; set; }
public string? Name { get; set; }
public string? Category { get; set; }
public decimal Price { get; set; }
}
}
Yukarıdaki vurgulanan kod aşağıdakileri değiştirir:
- ve
?
Category
özelliklerini null atanabilir başvuru türleri olarak bildirmekName
için ek açıklama eklendi.
ASP.NET Core, C# 8'de sunulan Nullable özelliğini kullanarak başvuru türlerinin işlenmesinde ek kod akışı analizi ve derleme zamanı güvenliği sağlayabilir. Örneğin, başvuru özel durumlarına karşı null
koruma.
Bu durumda amaç, ve'nin Name
Category
null atanabilir türler olabileceğidir.
ASP.NET Core 6.0 projeleri varsayılan olarak null atanabilir başvuru türlerini etkinleştirir. Daha fazla bilgi için bkz . Null atanabilir başvuru türleri.
ProductsController'i kopyalama
- Denetleyiciler klasörüne sağ tıklayın.
- Denetleyici Ekle...'yi > seçin.
- Yeni İskeleli Öğe Ekle iletişim kutusunda Mvc Denetleyicisi - Boş'u ve ardından Ekle'yi seçin.
- Denetleyiciye ProductsController adını verin ve Ekle'yi seçin.
- Şablon denetleyicisi kodunu aşağıdakilerle değiştirin:
using Microsoft.AspNetCore.Mvc;
using ProductsCore.Models;
namespace ProductsCore.Controllers;
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
Product[] products = new Product[]
{
new Product
{
Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1
},
new Product
{
Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M
},
new Product
{
Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M
}
};
[HttpGet]
public IEnumerable<Product> GetAllProducts()
{
return products;
}
[HttpGet("{id}")]
public ActionResult<Product> GetProduct(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return product;
}
}
Yukarıdaki vurgulanan kod, ASP.NET Core'a geçiş yapmak için aşağıdakileri değiştirir:
ASP.NET Core'da mevcut olmayan aşağıdaki ASP.NET 4.x bileşenlerinin using deyimlerini kaldırır:
ApiController
sınıfıSystem.Web.Http
Ad alanıIHttpActionResult
Arabirim
deyimini
using ProductsApp.Models;
olarakusing ProductsCore.Models;
değiştirir.Kök ad alanını olarak
ProductsCore
ayarlar.olarak ControllerBasedeğiştirilir
ApiController
.Başvuruyu çözümlemek
ControllerBase
için eklerusing Microsoft.AspNetCore.Mvc;
.Eylemin
GetProduct
dönüş türünü olarakIHttpActionResult
ActionResult<Product>
değiştirir. Daha fazla bilgi için bkz . Denetleyici eylemi dönüş türleri.Eylemin
GetProduct
return
deyimini aşağıdaki deyimle basitleştirir:return product;
Sonraki bölümlerde açıklanan aşağıdaki öznitelikleri ekler:
[Route("api/[controller]")]
[ApiController]
[HttpGet]
[HttpGet("{id}")]
Yönlendirme
ASP.NET Core, uç nokta yönlendirme ara yazılımının ara yazılım işlem hattının tamamını sarmaladığı minimum bir barındırma modeli sağlar. Bu nedenle yollar, yolların açıkça çağrılmadan UseEndpoints veya UseRouting kaydedilerek doğrudan WebApplication öğesine eklenebilir.
UseRouting
yol eşleştirmenin nerede gerçekleşeceğini belirtmek için hala kullanılabilir, ancak UseRouting
yolların ara yazılım işlem hattının başında eşleşmesi gerekiyorsa açıkça çağrılması gerekmez.
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Not: İşlem hattının sonunda doğrudan WebApplication yürütmeye eklenen yollar.
Geçirilen içindeki yönlendirme ProductsController
ProductsController
Geçirilen aşağıdaki vurgulanmış öznitelikleri içerir:
using Microsoft.AspNetCore.Mvc;
using ProductsCore.Models;
namespace ProductsCore.Controllers;
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
Product[] products = new Product[]
{
new Product
{
Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1
},
new Product
{
Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M
},
new Product
{
Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M
}
};
[HttpGet]
public IEnumerable<Product> GetAllProducts()
{
return products;
}
[HttpGet("{id}")]
public ActionResult<Product> GetProduct(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return product;
}
}
özniteliği,
[Route]
denetleyicinin öznitelik yönlendirme düzenini yapılandırır.özniteliği,
[ApiController]
öznitelik yönlendirmeyi bu denetleyicideki tüm eylemler için bir gereksinim haline getirir.Öznitelik yönlendirmesi ve
[action]
gibi[controller]
belirteçleri destekler. Çalışma zamanında her belirteç, özniteliğin uygulandığı denetleyici veya eylemin adıyla değiştirilir. Belirteçler:- Yol için sabit kodlanmış dizeler kullanma gereksinimini azaltır veya ortadan kaldırır.
- Otomatik yeniden adlandırma yeniden düzenlemeleri uygulandığında yolların ilgili denetleyicilerle ve eylemlerle eşitlenmiş durumda kaldığından emin olun.
HTTP Alma istekleri aşağıdaki özniteliklere sahip eylemler için
ProductController
etkinleştirilir:[HttpGet]
eylemineGetAllProducts
uygulanan öznitelik.[HttpGet("{id}")]
eylemineGetProduct
uygulanan öznitelik.
Geçirilen projeyi çalıştırın ve adresine /api/products
gidin. Örneğin: https://localhost:<port>
/api/products. Üç ürünün tam listesi görüntülenir. /api/products/1
adresine göz atın. İlk ürün görünür.
Örnek kodu görüntüleme veya indirme (indirme)
Ek kaynaklar
Bu makalede, ASP.NET 4.x Web API'sinden ASP.NET Core MVC'ye geçiş için gereken adımlar gösterilmektedir.
Örnek kodu görüntüleme veya indirme (indirme)
Ön koşullar
- Visual Studio 2019 16.4 ve üzeri ile ASP.NET ve web geliştirme iş yükü
- .NET Core 3.1 SDK
ASP.NET 4.x Web API projesini gözden geçirme
Bu makalede, ASP.NET Web API 2 ile Çalışmaya Başlama bölümünde oluşturulan ProductsApp projesi gerçekleştirilir. Bu projede, temel bir ASP.NET 4.x Web API projesi aşağıdaki gibi yapılandırılır.
içinde Global.asax.cs
öğesine bir çağrı yapılır WebApiConfig.Register
:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Routing;
namespace ProductsApp
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
}
WebApiConfig
sınıfı App_Start klasöründe bulunur ve statik Register
bir yönteme sahiptir:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace ProductsApp
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
Önceki sınıf:
- Aslında kullanılmamasına rağmen öznitelik yönlendirmesini yapılandırıyor.
- Yönlendirme tablosunu yapılandırır.
Örnek kod URL'lerin biçimiyle
/api/{controller}/{id}
{id}
eşleşmesini ve isteğe bağlı olmasını bekler.
Aşağıdaki bölümlerde, Web API projesinin ASP.NET Core MVC'ye geçişi gösterilmektedir.
Hedef projeyi oluşturma
Visual Studio'da yeni bir boş çözüm oluşturun ve geçiş için ASP.NET 4.x Web API projesini ekleyin:
- Dosya menüsünden Yeni Proje'yi> seçin.
- Boş Çözüm şablonunu seçin ve İleri'yi seçin.
- Çözümü WebAPIMigration olarak adlandırın. Create'u seçin.
- Mevcut ProductsApp projesini çözüme ekleyin.
Geçiş için yeni bir API projesi ekleyin:
- Çözüme yeni bir ASP.NET Core Web Uygulaması projesi ekleyin.
- Yeni projenizi yapılandırın iletişim kutusunda Projeyi ProductsCore olarak adlandırın ve Oluştur'u seçin.
- Yeni ASP.NET Core Web Uygulaması oluştur iletişim kutusunda .NET Core ve ASP.NET Core 3.1'in seçili olduğunu onaylayın. API proje şablonunu seçin ve Oluştur'u seçin.
WeatherForecast.cs
VeControllers/WeatherForecastController.cs
örnek dosyalarını yeni ProductsCore projesinden kaldırın.
Çözüm artık iki proje içeriyor. Aşağıdaki bölümlerde ProductsApp projesinin içeriğinin ProductsCore projesine geçirilmesi açıklanmaktadır.
Yapılandırmayı geçirme
ASP.NET Core, App_Start klasörünü veya Global.asax dosyasını kullanmaz. Ayrıca, web.config dosyası yayımlama zamanında eklenir.
Startup
sınıfı:
- Global.asax'ın yerini alır.
- Tüm uygulama başlatma görevlerini işler.
Daha fazla bilgi için, bkz. ASP.NET Core'de uygulama başlatma.
Modelleri ve denetleyicileri geçirme
Aşağıdaki kod, ASP.NET Core için güncelleştirilecek öğesini gösterir ProductsController
:
using ProductsApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
namespace ProductsApp.Controllers
{
public class ProductsController : ApiController
{
Product[] products = new Product[]
{
new Product
{
Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1
},
new Product
{
Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M
},
new Product
{
Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M
}
};
public IEnumerable<Product> GetAllProducts()
{
return products;
}
public IHttpActionResult GetProduct(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
}
}
ASP.NET Core için güncelleştirme ProductsController
:
- Özgün projedeki Modeller klasörünü yenisine kopyalayın
Controllers/ProductsController.cs
. - Kopyalanan dosyaların kök ad alanını olarak
ProductsCore
değiştirin. - deyimini olarak
using ProductsCore.Models;
güncelleştirinusing ProductsApp.Models;
.
aşağıdaki bileşenler ASP.NET Core'da yoktur:
ApiController
sınıfıSystem.Web.Http
Ad alanıIHttpActionResult
Arabirim
Aşağıdaki değişiklikleri yapın:
ApiController
değerini ControllerBase olarak değiştirin. BaşvuruyuControllerBase
çözmek için ekleyinusing Microsoft.AspNetCore.Mvc;
.using System.Web.Http;
klasörünü silin.Eylemin
GetProduct
dönüş türünü olarakIHttpActionResult
ActionResult<Product>
değiştirin.Eylemin
GetProduct
return
deyimini aşağıdaki şekilde basitleştirin:return product;
Yönlendirmeyi yapılandırma
ASP.NET Core API proje şablonu, oluşturulan kodda uç nokta yönlendirme yapılandırmasını içerir.
Aşağıdaki UseRouting ve UseEndpoints çağrıları:
- Yol eşleştirmeyi ve uç nokta yürütmeyi ara yazılım işlem hattına kaydedin.
- ProductsApp projesinin
App_Start/WebApiConfig.cs
dosyasını değiştirin.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Yönlendirmeyi aşağıdaki gibi yapılandırın:
ProductsController
Sınıfı aşağıdaki özniteliklerle işaretleyin:[Route("api/[controller]")] [ApiController]
Yukarıdaki
[Route]
öznitelik, denetleyicinin öznitelik yönlendirme düzenini yapılandırır. özniteliği,[ApiController]
öznitelik yönlendirmeyi bu denetleyicideki tüm eylemler için bir gereksinim haline getirir.Öznitelik yönlendirmesi ve
[action]
gibi[controller]
belirteçleri destekler. Çalışma zamanında her belirteç, özniteliğin uygulandığı denetleyici veya eylemin adıyla değiştirilir. Belirteçler:- Projedeki sihirli dizelerin sayısını azaltın.
- Otomatik yeniden adlandırma yeniden düzenlemeleri uygulandığında yolların ilgili denetleyicilerle ve eylemlerle eşitlenmiş durumda kaldığından emin olun.
Eylemlere
ProductsController
HTTP Alma isteklerini etkinleştirin:- özniteliğini
[HttpGet]
eylemeGetAllProducts
uygulayın. - özniteliğini
[HttpGet("{id}")]
eylemeGetProduct
uygulayın.
- özniteliğini
Geçirilen projeyi çalıştırın ve adresine /api/products
gidin. Üç ürünün tam listesi görüntülenir. /api/products/1
adresine göz atın. İlk ürün görünür.
Ek kaynaklar
ASP.NET Core