Share via


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

Yeni ASP.NET Core Web API projesini oluşturma

  1. Dosya menüsünden Yeni Proje'yi> seçin.
  2. Arama kutusuna Web API'sini girin.
  3. ASP.NET Core Web API şablonunu seçin ve İleri'yi seçin.
  4. Yeni projenizi yapılandırın iletişim kutusunda projeye ProductsCore adını verin ve İleri'yi seçin.
  5. Ek bilgi iletişim kutusunda:
    1. Framework'ün .NET 6.0 (Uzun vadeli destek) olduğunu onaylayın.
    2. Denetleyicileri kullan (en az API kullanmak için işaretini kaldırın) onay kutusunun işaretli olduğunu onaylayın.
    3. OpenAPI desteğini etkinleştir seçeneğinin işaretini kaldırın.
    4. Create'u seçin.

WeatherForecast şablon dosyalarını kaldırma

  1. WeatherForecast.cs Ve Controllers/WeatherForecastController.cs örnek dosyalarını yeni ProductsCore projesinden kaldırın.
  2. Properties\launch Ayarlar.json dosyasını açın.
  3. özelliklerini olarak weatherforcastproductscoredeğ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

  1. Çözüm Gezgini'da projeye sağ tıklayın. Yeni Klasör Ekle'yi>seçin. Klasöre Models adını verin.
  2. 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.
  3. Ş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 bildirmek Name 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 NameCategory 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

  1. Denetleyiciler klasörüne sağ tıklayın.
  2. Denetleyici Ekle...'yi > seçin.
  3. Yeni İskeleli Öğe Ekle iletişim kutusunda Mvc Denetleyicisi - Boş'u ve ardından Ekle'yi seçin.
  4. Denetleyiciye ProductsController adını verin ve Ekle'yi seçin.
  5. Ş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; olarak using ProductsCore.Models;değiştirir.

  • Kök ad alanını olarak ProductsCoreayarlar.

  • olarak ControllerBasedeğiştirilirApiController.

  • Başvuruyu çözümlemek ControllerBase için eklerusing Microsoft.AspNetCore.Mvc;.

  • Eylemin GetProduct dönüş türünü olarak IHttpActionResultActionResult<Product>değiştirir. Daha fazla bilgi için bkz . Denetleyici eylemi dönüş türleri.

  • Eylemin GetProductreturn 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] eylemine GetAllProducts uygulanan öznitelik.
    • [HttpGet("{id}")] eylemine GetProduct uygulanan öznitelik.

Geçirilen projeyi çalıştırın ve adresine /api/productsgidin. Ö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

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:

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:

  1. Dosya menüsünden Yeni Proje'yi> seçin.
  2. Boş Çözüm şablonunu seçin ve İleri'yi seçin.
  3. Çözümü WebAPIMigration olarak adlandırın. Create'u seçin.
  4. Mevcut ProductsApp projesini çözüme ekleyin.

Geçiş için yeni bir API projesi ekleyin:

  1. Çözüme yeni bir ASP.NET Core Web Uygulaması projesi ekleyin.
  2. Yeni projenizi yapılandırın iletişim kutusunda Projeyi ProductsCore olarak adlandırın ve Oluştur'u seçin.
  3. 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.
  4. WeatherForecast.cs Ve Controllers/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 :

  1. Özgün projedeki Modeller klasörünü yenisine kopyalayınControllers/ProductsController.cs.
  2. Kopyalanan dosyaların kök ad alanını olarak ProductsCoredeğiştirin.
  3. 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:

  1. ApiController değerini ControllerBase olarak değiştirin. Başvuruyu ControllerBase çözmek için ekleyinusing Microsoft.AspNetCore.Mvc;.

  2. using System.Web.Http; klasörünü silin.

  3. Eylemin GetProduct dönüş türünü olarak IHttpActionResultActionResult<Product>değiştirin.

  4. Eylemin GetProductreturn 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:

  1. 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.
  2. Eylemlere ProductsController HTTP Alma isteklerini etkinleştirin:

    • özniteliğini [HttpGet] eyleme GetAllProducts uygulayın.
    • özniteliğini [HttpGet("{id}")] eyleme GetProduct uygulayın.

Geçirilen projeyi çalıştırın ve adresine /api/productsgidin. Üç ü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