Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 makale, ASP.NET Web API 2 ile kullanmaya başlama aşamasında oluşturulan Products denetleyicisinin ASP.NET Core'a nasıl geçirileceğini göstermektedir.
Önkoşullar
- Visual Studio 2022 ile ASP.NET ve web geliştirme iş yükü.
- .NET 6 SDK
Yeni ASP.NET Core Web API projesini oluşturma
- Dosya menüsünden Yeni>Proje 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 iletişim kutusunda projeyi ProductsCore adlandırın ve İleri seçin.
-
Ek bilgi iletişim kutusunda:
- Framework'in .NET 6.0 (Uzun vadeli destek)olduğunu onaylayın.
- Denetleyicileri kullan onay kutusunun işaretli olduğundan emin olun (Minimal API'leri kullanmak için işareti kaldırın).
- OpenAPI desteğini etkinleştirme seçeneğinin işaretini kaldırın.
- Oluştur'i seçin.
WeatherForecast şablon dosyalarını kaldırma
- Yeni
WeatherForecast.cs
projesindenControllers/WeatherForecastController.cs
ve örnek dosyalarını kaldırın. - Özellikler\launchSettings.json dosyasını açın.
-
launchUrl
özellikleriniweatherforcast
'denproductscore
olarak değiştirin.
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 dosya.
Program.cs
dosyası:
- global.asax'i değiştirir.
- Tüm uygulama başlatma görevlerini işler.
Daha fazla bilgi için bkz. ASP.NET Core'da 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. Ekle>Yeni Klasör'ü seçin. Models klasörünü adlandırın.
- Modelleri klasörüne sağ tıklayın. 'i seçin,>Sınıfı'i ekleyin. Sınıfı Ürün olarak adlandırın ve Ekleseç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:
-
?
veName
özelliklerini null atanabilir referans türleri olarak bildirmek içinCategory
ek açıklaması eklendi.
ASP.NET Core, C# 8 'de tanıtılanNull atanabilir özelliğini kullanarak, referans türlerinin işlenmesinde ek kod akışı analizi ve derleme zamanı güvenliği sağlayabilir. Örneğin, null
referans istisnalarına karşı korunma.
Bu durumda amaç, Name
ve Category
türlerinin null değer alabilir olmasıdır.
.NET 6 projelerinde ASP.NET Core varsayılan olarak null atanabilir başvuru türlerini etkinleştirir. Daha fazla bilgi için bkz. Null atanabilir başvuru türleri.
ProductsController kopyala
- Denetleyicileri klasörüne sağ tıklayın.
- seçin > Denetleyicisi Ekle....
- Yeni İskeleli Öğe Ekle iletişim kutusunda Mvc Denetleyicisi - Boş'i ve ardından Ekle'yiseçin.
- Denetleyiciyi ProductsController olarak adlandırın ve Ekleseçeneğini 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
arabirimi
-
using ProductsApp.Models;
deyiminiusing ProductsCore.Models;
olarak değiştirir.Kök ad alanını
ProductsCore
olarak ayarlar.ApiController
'ı ControllerBase'e değiştirir.using Microsoft.AspNetCore.Mvc;
referansı çözmek içinControllerBase
ekler.GetProduct
eyleminin dönüş türünüIHttpActionResult
ActionResult<Product>
olarak değiştirir. Daha fazla bilgi için bkz. Denetleyici eylemi dönüş türleri.GetProduct
eylemininreturn
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 bütün ara yazılım hattını sardığı minimal bir barındırma modeli sunar, bu nedenle doğrudan WebApplication'a eklenebilir ve yolları kaydetmek için açık bir UseEndpoints veya UseRouting çağrısına gerek yoktur.
UseRouting
yol eşleştirmenin nerede gerçekleşeceğini belirtmek için de kullanılabilir, ancak ara yazılım işlem hattının başında yolların eşleşmesi gerekiyorsa UseRouting
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: doğrudan WebApplication eklenen yollar, işlem hattının sonuna geldiğinde yürütülür.
Taşınan ProductsController
'da Yönlendirme
Geçirilen ProductsController
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;
}
}
[Route]
özniteliği , denetleyicinin öznitelik yönlendirme düzenini yapılandırır.[ApiController]
özniteliği, öznitelik yönlendirmeyi bu denetleyicideki tüm eylemler için bir gereksinim haline getirir.[action]
belirteçleri destekler. Çalışma zamanında her belirteç, özniteliğin uygulandığı denetleyici veya eylemin adıyla değiştirilir. Jetonlar:- 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
ProductController
eylemler için etkinleştirilir:-
[HttpGet]
özniteliği,GetAllProducts
eylemine uygulandı. -
[HttpGet("{id}")]
özniteliği,GetProduct
eylemine uygulandı.
-
Geçirilen projeyi çalıştırın ve /api/products
adresine gidin. Örneğin: /api/products https://localhost:<port>
. Üç ürünün tam listesi görüntülenir.
/api/products/1
adresine göz atın. İlk ürün ortaya çıkıyor.
Örnek kodu görüntüleme veya indirme (indirme)
Ek kaynaklar
- ASP.NET Core ile web API'leri oluşturma
- ASP.NET Core web API'sinde denetleyici eylemi dönüş türleri
- ASP.NET Core MVC için Uyumluluk sürümü
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)
Önkoş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 makale, ASP.NET Web API 2ile Başlarken oluşturulan ProductsApp projesini kullanır. Bu projede, temel bir ASP.NET 4.x Web API projesi aşağıdaki gibi yapılandırılır.
Global.asax.cs
içinde WebApiConfig.Register
için bir çağrı yapılır:
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 bir Register
yöntemine 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:
- öznitelik yönlendirmesiniyapılandırıyor, ancak aslında henüz kullanılmıyor.
- Yönlendirme tablosunu yapılandırır.
Örnek kod URL'lerin
/api/{controller}/{id}
biçimiyle eşleşmesini ve{id}
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 seçin.
- Boş Çözüm şablonunu seçin ve Sonraki'yiseçin.
- Çözümü WebAPIMigration adlandırın. Oluştur'i 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 projeyi yapılandır iletişim kutusunda, projeyi ProductsCoreolarak adlandırın ve Oluştur'useçin.
- Yeni bir ASP.NET Core Web Uygulaması oluştur iletişim kutusunda, .NET Core ve ASP.NET Core 3.1 seçili olduğunu onaylayın. API proje şablonunu seçin ve Oluştur'u seçin.
- Yeni
WeatherForecast.cs
projesindenControllers/WeatherForecastController.cs
ve örnek dosyalarını 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ı taşıma
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'i değiştirir.
- Tüm uygulama başlatma görevlerini işler.
Daha fazla bilgi için bkz. ASP.NET Core'da Uygulama Başlatma.
Modelleri ve denetleyicileri geçirme
Aşağıdaki kod, ASP.NET Core için güncellenmesi gereken ProductsController
'ı gösterir.
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 ProductsController
güncelleştirin:
-
Controllers/ProductsController.cs
ve Modelleri klasörünü özgün projeden yenisine kopyalayın. - Kopyalanan dosyaların kök ad alanını
ProductsCore
olarak değiştirin. -
using ProductsApp.Models;
deyiminiusing ProductsCore.Models;
olarak güncelleştirin.
aşağıdaki bileşenler ASP.NET Core'da yoktur:
-
ApiController
sınıfı -
System.Web.Http
ad alanı -
IHttpActionResult
arabirimi
Aşağıdaki değişiklikleri yapın:
ApiController
değerini ControllerBase olarak değiştirin.using Microsoft.AspNetCore.Mvc;
referansını çözmek içinControllerBase
ekleyin."
using System.Web.Http;
'i sil."GetProduct
eyleminin dönüş türünüIHttpActionResult
'denActionResult<Product>
'ye değiştirin.GetProduct
eylemininreturn
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ı:
- orta katman işlem hattına rota eşleştirme ve uç nokta işlemlerini 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ını aşağıdaki özniteliklerle işaretleyin:[Route("api/[controller]")] [ApiController]
Yukarıdaki
[Route]
özniteliği, denetleyicinin öznitelik yönlendirme düzenini yapılandırır.[ApiController]
özniteliği, öznitelik yönlendirmeyi bu denetleyicideki tüm eylemler için bir gereksinim haline getirir.Öznitelik yönlendirmesi
[controller]
ve[action]
gibi belirteçleri destekler. Çalışma zamanında her belirteç, özniteliğin uygulandığı denetleyici veya eylemin adıyla değiştirilir. Jetonlar:- 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.
ProductsController
eylemlerine HTTP GET isteklerini etkinleştirin.-
[HttpGet]
eylemineGetAllProducts
özniteliğini uygulayın. -
[HttpGet("{id}")]
eylemineGetProduct
özniteliğini uygulayın.
-
Geçirilen projeyi çalıştırın ve /api/products
adresine gidin. Üç ürünün tam listesi görüntülenir.
/api/products/1
adresine göz atın. İlk ürün ortaya çıkıyor.
Ek kaynaklar
- ASP.NET Core ile web API'leri oluşturma
- ASP.NET Core web API'sinde denetleyici eylemi dönüş türleri
- ASP.NET Core MVC için Uyumluluk sürümü
ASP.NET Core