Visual Studio 2013 için ASP.NET ve Web Araçları Sürüm Notları

Microsoft tarafından

Bu belgede Visual Studio 2013 için ASP.NET ve Web Araçları'nın sürümü açıklanmaktadır.

İçindekiler

Visual Studio 2013 için ASP.NET ve Web Araçlarındaki Yeni Özellikler

Yükleme Notları

Visual Studio 2013 için ASP.NET ve Web Araçları ana yükleyicide paketlenmiştir ve buradan indirilebilir.

Belgeler

Visual Studio 2013 için ASP.NET ve Web Araçları hakkındaki öğreticiler ve diğer bilgiler ASP.NET web sitesinden edinilebilir.

Yazılım Gereksinimleri

ASP.NET ve Web Araçları için Visual Studio 2013 gerekir.

Visual Studio 2013 için ASP.NET ve Web Araçlarındaki Yeni Özellikler

Aşağıdaki bölümlerde, yayında tanıtılan özellikler açıklanmaktadır.

Tek ASP.NET

Visual Studio 2013'ün yayımlanmasıyla birlikte, ASP.NET teknolojileri kullanma deneyimini birleştirmeye yönelik bir adım attık, böylece istediklerinizi kolayca karıştırıp eşleştirebilirsiniz. Örneğin, MVC kullanarak bir projeyi başlatabilir ve daha sonra projeye kolayca Web Forms sayfaları ekleyebilir veya Web Forms projesindeki Web API'lerini iskeleleyebilirsiniz. One ASP.NET, geliştirici olarak ASP.NET içinde sevdiğiniz şeyleri yapmanızı kolaylaştırmakla ilgilidir. Hangi teknolojiyi seçerseniz seçin, güvendiğiniz One ASP.NET'in sağlam temeli üzerinde inşa ettiğinizden emin olabilirsiniz.

Yeni Web Projesi Deneyimi

Visual Studio 2013'te yeni web projeleri oluşturma deneyimini geliştirdik. Yeni ASP.NET Web Projesi iletişim kutusunda istediğiniz proje türünü seçebilir, teknolojilerin herhangi bir bileşimini yapılandırabilir (Web Forms, MVC, Web API), kimlik doğrulama seçeneklerini yapılandırabilir ve birim testi projesi ekleyebilirsiniz.

Yeni ASP.NET Projesi

Yeni iletişim kutusu, şablonların çoğu için varsayılan kimlik doğrulama seçeneklerini değiştirmenize olanak tanır. Örneğin, bir ASP.NET Web Forms projesi oluşturduğunuzda aşağıdaki seçeneklerden herhangi birini seçebilirsiniz:

  • Kimlik Doğrulaması Yok
  • Bireysel Kullanıcı Hesapları (ASP.NET üyeliği veya sosyal sağlayıcı oturum açma)
  • Kuruluş Hesapları (İnternet uygulamasında Active Directory)
  • Windows Kimlik Doğrulaması (intranet uygulamasında Active Directory)

Kimlik doğrulaması seçenekleri

Yeni kimlik doğrulama seçenekleri hakkında daha fazla bilgi için bu belgenin devamında ASP.NET Identity bölümüne bakın.

ASP.NET yapı iskelesi

ASP.NET yapı iskelesi, ASP.NET Web uygulamaları için bir kod oluşturma çerçevesidir. Projenize bir veri modeliyle etkileşim kuran ortak kod eklemeyi kolaylaştırır.

Visual Studio'nun önceki sürümlerinde yapı iskelesi ASP.NET MVC projeleri ile sınırlıydı. Visual Studio 2013 ile artık Web Forms da dahil olmak üzere tüm ASP.NET projelerde yapı iskelesi kullanabilirsiniz. Visual Studio 2013 şu anda bir Web Forms projesi için sayfa oluşturmayı desteklememektedir, ancak projeye MVC bağımlılıkları ekleyerek Web Forms ile yapı iskelesi oluşturmayı kullanmaya devam edebilirsiniz. Web Forms için sayfa oluşturma desteği gelecekteki bir güncelleştirmede eklenecektir.

Taslak oluşturma kullanırken, tüm gerekli bağımlılıkların projeye yüklendiğinden emin oluruz. Örneğin, bir ASP.NET Web Forms projesiyle başlar ve sonra bir Web API Denetleyicisi eklemek için iskeleyi kullanırsanız, gerekli NuGet paketleri ve başvuruları projenize otomatik olarak eklenir.

Bir Web Forms projesine MVC iskelesi eklemek için Yeni bir yapı iskelesi öğesi ekleyin ve iletişim kutusu penceresinde MVC 5 Bağımlılıkları'nı seçin. MVC iskelesi için iki seçenek vardır; En Az ve Tam. Minimal'i seçerseniz, projenize yalnızca NuGet paketleri ve ASP.NET MVC referansları eklenir. Tam seçeneğini belirlerseniz, MVC projesi için gerekli içerik dosyalarının yanı sıra En düşük bağımlılıklar eklenir.

Eşzamanlı olmayan denetleyicilerin iskelet oluşturma desteği, Entity Framework 6'nın yeni eşzamanlı olmayan özelliklerini kullanır.

Daha fazla bilgi ve eğitimler için bakınız ASP.NET İskeleleme Genel Bakış.

Yeni Tarayıcı Bağlantısı özelliği, birden çok tarayıcıyı Visual Studio'ya bağlamanızı ve araç çubuğundaki bir düğmeye tıklayarak tümünü yenilemenizi sağlar. Mobil öykünücüler de dahil olmak üzere geliştirme sitenize birden çok tarayıcı bağlayabilir ve tüm tarayıcıları aynı anda yenilemek için Yenile'ye tıklayabilirsiniz. Tarayıcı Bağlantısı, geliştiricilerin Tarayıcı Bağlantısı uzantılarını yazmasına olanak tanımak için bir API de kullanıma sunar.

Visual Studio menüsünün ekran görüntüsü, Yenile simgesi ve açılır menüde vurgulanan Tarayıcı Bağlantısı Panosu.

Geliştiricilerin Tarayıcı Bağlantısı API'sinin avantajlarından yararlanmasına olanak tanıyarak Visual Studio ile bağlı herhangi bir tarayıcı arasındaki sınırları aşan çok gelişmiş senaryolar oluşturmak mümkün hale gelir. Web Essentials, Visual Studio ile tarayıcının geliştirici araçları, uzaktan denetimli mobil öykünücüler ve çok daha fazlası arasında tümleşik bir deneyim oluşturmak için API'den yararlanır.

Visual Studio Web Düzenleyicisi Geliştirmeleri

Visual Studio 2013, web uygulamalarında Razor dosyaları ve HTML dosyaları için yeni bir HTML düzenleyicisi içerir. Yeni HTML düzenleyicisi, HTML5'i temel alan tek bir birleşik şema sağlar. Otomatik köşeli parantez tamamlama, jQuery UI ve AngularJS öznitelik IntelliSense, öznitelik IntelliSense Gruplandırma, ID ve sınıf adı IntelliSense ve daha iyi performans, biçimlendirme ve SmartTag'leri içeren diğer iyileştirmelere sahiptir.

Aşağıdaki ekran görüntüsünde, HTML düzenleyicisinde Bootstrap özniteliği IntelliSense'in kullanılması gösterilmektedir.

HTML düzenleyicisinde Intellisense

Visual Studio 2013 ayrıca hem CoffeeScript hem de LESS düzenleyicileriyle birlikte gelir. LESS düzenleyicisi, CSS düzenleyicisinin tüm harika özellikleriyle birlikte gelir ve zincirdeki tüm LESS belgelerinde değişkenler ve mixinler için belirli bir IntelliSense'e sahiptir.

Visual Studio'da Azure App Service Web Uygulamalarına Destek

.NET 2.2 için Azure SDK ile Visual Studio 2013'te, uzak web uygulamalarınızla doğrudan etkileşime geçmek için Sunucu Gezgini'ni kullanabilirsiniz. Azure hesabınızda oturum açabilir, yeni web uygulamaları oluşturabilir, uygulamaları yapılandırabilir, gerçek zamanlı günlükleri görüntüleyebilir ve daha fazlasını yapabilirsiniz. SDK 2.2 yayımlandıktan kısa süre sonra Azure'da uzaktan hata ayıklama modunda çalışabileceksiniz. Azure Uygulaması Service Web Apps'e yönelik yeni özelliklerin çoğu, .NET için Azure SDK'nın geçerli sürümünü yüklediğinizde Visual Studio 2012'de de çalışır.

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

Web Yayımlama Geliştirmeleri

Visual Studio 2013 yeni ve gelişmiş Web Yayımlama özellikleri içerir. Bunlardan birkaçı şunlardır:

ASP.NET web dağıtımı hakkında daha fazla bilgi için ASP.NET sitesine bakın.

NuGet 2.7

NuGet 2.7, NuGet 2.7 Sürüm Notları'nda ayrıntılı olarak açıklanan zengin bir dizi yeni özellik içerir.

NuGet'in bu sürümü, NuGet'in paket geri yükleme özelliğinin paketleri indirmesi için açık onay sağlama gereksinimini de ortadan kaldırır. Onay (ve NuGet'in tercihler iletişim kutusundaki ilişkili onay kutusu) artık NuGet yüklenerek verilir. Şimdi paket geri yükleme varsayılan olarak çalışır.

ASP.NET Web Forms (Web formları için bir framework)

Tek ASP.NET

Web Forms proje şablonları yeni One ASP.NET deneyimiyle sorunsuz bir şekilde tümleştirilir. Web Forms projenize MVC ve Web API desteği ekleyebilir ve One ASP.NET proje oluşturma sihirbazını kullanarak kimlik doğrulamasını yapılandırabilirsiniz.

ASP.NET Kimlik

Web Forms proje şablonları yeni ASP.NET Kimlik çerçevesini destekler. Ayrıca, şablonlar artık bir Web Forms intranet projesi oluşturmayı destekliyor.

Bootstrap

Web Forms şablonları kolayca özelleştirebileceğiniz şık ve duyarlı bir görünüm ve his sağlamak için Bootstrap'ı kullanır.

ASP.NET MVC 5

Tek ASP.NET

Web MVC proje şablonları yeni One ASP.NET deneyimiyle sorunsuz bir şekilde tümleştirilir. One ASP.NET proje oluşturma sihirbazını kullanarak MVC projenizi özelleştirebilir ve kimlik doğrulamasını yapılandırabilirsiniz. MVC 5'i ASP.NET için giriş niteliğinde bir öğretici, ASP.NET MVC 5 ile Çalışmaya Başlama bölümünde bulunabilir.

MVC 4 projelerini MVC 5'e yükseltme hakkında bilgi için bkz ASP.NET MVC 4 ve Web API Projesini ASP.NET MVC 5 ve Web API 2'ye Yükseltme.

ASP.NET Kimlik

MVC proje şablonları, kimlik doğrulaması ve kimlik yönetimi için ASP.NET Kimliği kullanacak şekilde güncelleştirildi. Facebook ve Google kimlik doğrulamasını ve yeni üyelik API'sini içeren bir öğretici Facebook ve Google OAuth2 ile ASP.NET MVC 5 Uygulaması Oluşturma ve OpenID Oturum Açma ile kimlik doğrulaması ve SQL DB ile ASP.NET MVC uygulaması oluşturma ve Azure Uygulama Hizmeti'ne dağıtma sayfalarında bulunabilir.

Bootstrap

MVC proje şablonu, kolayca özelleştirebileceğiniz şık ve duyarlı bir görünüm ve his sağlamak için Bootstrap'ı kullanacak şekilde güncelleştirildi.

Kimlik doğrulama filtreleri

Kimlik doğrulama filtreleri, ASP.NET MVC'de ASP.NET MVC işlem hattındaki yetkilendirme filtrelerinden önce çalışan ve tüm denetleyiciler için eylem başına, denetleyici başına veya genel olarak kimlik doğrulama mantığı belirtmenize olanak sağlayan yeni bir filtre türüdür. Kimlik doğrulama filtreleri istekteki kimlik bilgilerini işler ve karşılık gelen bir sorumlu sağlar. Kimlik doğrulama filtreleri, yetkisiz isteklere yanıt olarak kimlik doğrulama zorlukları da ekleyebilir.

Filtre yapılandırmaları

Artık geçersiz kılma filtresi belirterek belirli bir eylem yöntemine veya denetleyiciye hangi filtrelerin uygulanacağını geçersiz kılabilirsiniz. Geçersiz kılma filtreleri, belirli bir kapsam (eylem veya denetleyici) için çalıştırılmaması gereken filtre türleri kümesini belirtir. Bu, genel olarak uygulanan ancak ardından belirli genel filtrelerin belirli eylemlere veya denetleyicilere uygulanmasını dışlayan filtreler yapılandırmanıza olanak tanır.

Öznitelik yönlendirme

ASP.NET MVC artık, yazarı Tim McCall'ın katkıları sayesinde öznitelik yönlendirmeyi http://attributerouting.netdestekliyor. Özellik Yönlendirme ile, eylemlerinize ve denetleyicilerinize notlar ekleyerek yollarınızı belirtebilirsiniz.

ASP.NET Web API 2

Öznitelik yönlendirme

ASP.NET Web API'sinin yazarı Tim McCall'ın katkıları sayesinde artık öznitelik yönlendirmeyi http://attributerouting.netdestekliyor. Öznitelik yönlendirme ile, eylemlerinize ve denetleyicilerinize aşağıdaki gibi ek açıklama ekleyerek Web API'nizin yollarını belirtebilirsiniz:

[RoutePrefix("orders")] 
public class OrdersController : ApiController 
{ 
    [Route("{id}")] 
    public Order Get(int id) { } 
    [Route("{id}/approve")] 
    public Order Approve(int id) { } 
}

Öznitelik yönlendirme, web API'nizdeki URI'ler üzerinde daha fazla denetim sağlar. Örneğin, tek bir API denetleyicisi kullanarak kaynak hiyerarşisini kolayca tanımlayabilirsiniz:

public class MoviesController : ApiController 
{ 
    [Route("movies")] 
    public IEnumerable<Movie> Get() { } 
    [Route("actors/{actorId}/movies")] 
    public IEnumerable<Movie> GetByActor(int actorId) { } 
    [Route("directors/{directorId}/movies")] 
    public IEnumerable<Movie> GetByDirector(int directorId) { } 
}

Öznitelik yönlendirme ayrıca isteğe bağlı parametreleri, varsayılan değerleri ve yol kısıtlamalarını belirtmek için kullanışlı bir söz dizimi sağlar:

// Optional parameter
[Route("people/{name?}")]
// Default value
[Route("people/{name=Dan}")]
// Constraint: Alphabetic characters only. 
[Route("people/{name:alpha}")]

Öznitelik yönlendirme hakkında daha fazla bilgi için bkz . Web API 2'de Öznitelik Yönlendirme.

OAuth 2.0

Web API'si ve Tek Sayfalı Uygulama proje şablonları artık OAuth 2.0 kullanarak yetkilendirmeyi destekliyor. OAuth 2.0, korumalı kaynaklara istemci erişimini yetkilendirmeye yönelik bir çerçevedir. Tarayıcılar ve mobil cihazlar dahil olmak üzere çeşitli istemciler için çalışır.

OAuth 2.0 desteği, taşıyıcı kimlik doğrulaması ve yetkilendirme sunucusu rolünü uygulamak için Microsoft OWIN Bileşenleri tarafından sağlanan yeni güvenlik ara yazılımını temel alır. Alternatif olarak, istemciler Azure Active Directory veya Windows Server 2012 R2'de ADFS gibi bir kuruluş yetkilendirme sunucusu kullanılarak yetkilendirilebilir.

OData Geliştirmeleri

$select, $expand, $batch ve $value desteği

ASP.NET Web API OData artık $select, $expand ve $value için tam desteğe sahiptir. Değişiklik kümelerinin istek toplu işlemi ve işlenmesi için de $batch kullanabilirsiniz.

$select ve $expand seçenekleri, OData uç noktasından döndürülen verilerin şeklini değiştirmenize olanak sağlar. Daha fazla bilgi için bkz . Web API OData'da $select ve $expand desteğine giriş.

Geliştirilmiş genişletilebilirlik

OData biçimlendiricileri artık genişletilebilir. Atom girdisi meta verileri ekleyebilir, adlandırılmış akış ve medya bağlantısı girdilerini destekleyebilir, örnek ek açıklamaları ekleyebilir ve bağlantıların nasıl oluşturulduğunu özelleştirebilirsiniz.

Türü olmayan destek

Artık varlık türleriniz için CLR türleri tanımlamanıza gerek kalmadan OData hizmetleri oluşturabilirsiniz. Bunun yerine, OData denetleyicileriniz, OData biçimlendiricilerinin serileştirip deserileştirebildiği IEdmObject örneklerini alabilir veya döndürebilir.

Mevcut modeli yeniden kullanma

Zaten var olan bir varlık veri modeliniz (EDM) varsa, artık yeni bir tane oluşturmak yerine doğrudan yeniden kullanabilirsiniz. Örneğin, Entity Framework kullanıyorsanız EF'in sizin için derlediğini EDM'yi kullanabilirsiniz.

İstek Toplu İşlemi

İstek toplu işlemi birden çok işlemi tek bir HTTP POST isteğinde bir araya getirerek ağ trafiğini azaltır ve daha sorunsuz, daha az gevelenek bir kullanıcı arabirimi sağlar. ASP.NET Web API'sinde artık istek toplu işlemi için çeşitli stratejiler destekleniyor:

  • OData hizmetinin $batch uç noktasını kullanın.
  • Birden çok isteği tek bir MIME çok parçalı istekte paketle.
  • Özel bir toplu işleme formatı kullanın.

İstek toplu işlemini etkinleştirmek için Web API yapılandırmanıza toplu iş işleyicisi içeren bir yol eklemeniz yeterlidir:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
        config.Routes.MapHttpBatchRoute( 
            routeName: "WebApiBatch", 
            routeTemplate: "api/batch", 
            batchHandler: new DefaultHttpBatchHandler(GlobalConfiguration.DefaultServer)); 
    } 
}

Ayrıca isteklerin veya yürütme işlemlerinin sırayla mı yoksa herhangi bir sırada mı gerçekleştirilip yürütülmeyeceğini de denetleyebilirsiniz.

Taşınabilir ASP.NET Web API İstemcisi

Artık ASP.NET Web API İstemcisi'ni kullanarak Windows Mağazası ve Windows Phone 8 uygulamalarınızda çalışan taşınabilir sınıf kitaplıkları oluşturabilirsiniz. İstemci ve sunucu arasında paylaşılabilen taşınabilir biçimlendiriciler de oluşturabilirsiniz.

Geliştirilmiş Test Edilebilirlik

Web API 2, API denetleyicilerinizin birim testini çok daha kolay hale getirir. api denetleyicinizin örneğini istek iletiniz ve yapılandırmanızla oluşturun ve ardından test etmek istediğiniz eylem yöntemini çağırın. Bağlantı oluşturma işlemi gerçekleştiren eylem yöntemleri için UrlHelper sınıfıyla alay etmek de kolaydır.

IHttpActionResult

Artık Web API'sinin eylem yöntemlerinin sonucunu kapsüllemek için IHttpActionResult uygulayabilirsiniz. Bir Web API eylem yönteminden döndürülen bir IHttpActionResult, ASP.NET Web API çalışma zamanı tarafından yürütülerek sonuç yanıt iletisini oluşturur. Web API uygulamanızın birim testini basitleştirmek için herhangi bir Web API'sinden IHttpActionResult döndürülebilir. Kolaylık sağlamak için belirli durum kodları, biçimlendirilmiş içerik veya içerikte anlaşmaya varılmış yanıtlar döndürmeye yönelik sonuçlar da dahil olmak üzere bir dizi IHttpActionResult uygulaması kullanıma hazır olarak sağlanır.

HttpRequestContext

Yeni HttpRequestContext , isteğe bağlı olan ancak istekten hemen ulaşılmayan tüm durumları izler. Örneğin, yönlendirme verilerini, istekle ilişkili sorumluyu, istemci sertifikasını, UrlHelper'ı ve sanal yol kökünü almak için HttpRequestContext kullanabilirsiniz. Birim testi amacıyla kolayca bir HttpRequestContext oluşturabilirsiniz.

İstekle birlikte akıtıldığından dolayı, prensip artık Thread.CurrentPrincipal yerine Web API işlem hattında olduğu süre boyunca isteğin ömrü boyunca kullanılabilir.

CORS

Brock Allen'ın bir diğer büyük katkısı sayesinde ASP.NET artık Çıkış Noktaları Arası İstek Paylaşımı'nı (CORS) tam olarak destekliyor.

Tarayıcı güvenliği, bir web sitesinin başka bir etki alanına AJAX istekleri göndermesini engeller. CORS , bir sunucunun aynı kaynak ilkesini gevşetmesini sağlayan bir W3C standardıdır. BIR sunucu CORS kullanarak bazı çıkış noktaları arası isteklere izin verirken diğerlerini reddedebilir.

Web API 2 artık denetim öncesi isteklerin otomatik olarak işlenmesi de dahil olmak üzere CORS'yi destekliyor. Daha fazla bilgi için ASP.NET Web API'de Kaynaklar Arası İstekleri Etkinleştirme konusuna bakın.

Kimlik Doğrulama Filtreleri

Kimlik doğrulama filtreleri, ASP.NET Web API'sinde ASP.NET Web API işlem hattındaki yetkilendirme filtrelerinden önce çalışan ve tüm denetleyiciler için eylem başına, denetleyici başına veya genel olarak kimlik doğrulama mantığı belirtmenize olanak sağlayan yeni bir filtre türüdür. Kimlik doğrulama filtreleri istekteki kimlik bilgilerini işler ve karşılık gelen bir sorumlu sağlar. Kimlik doğrulama filtreleri, yetkisiz isteklere yanıt olarak kimlik doğrulama zorlukları da ekleyebilir.

Filtre Geçersiz Kılmaları

Artık geçersiz kılma filtresi belirterek belirli bir eylem yöntemine veya denetleyiciye hangi filtrelerin uygulanacağını geçersiz kılabilirsiniz. Geçersiz kılma filtreleri, belirli bir kapsam (eylem veya denetleyici) için çalıştırılmaması gereken filtre türleri kümesini belirtir. Bu, genel filtreler eklemenize olanak tanır, ancak ardından bazılarını belirli eylemlerden veya denetleyicilerden hariç tutmanızı sağlar.

OWIN Entegrasyonu

ASP.NET Web API'si artık OWIN'i tamamen destekler ve OWIN özellikli herhangi bir konakta çalıştırılabilir. Ayrıca, OWIN kimlik doğrulama sistemiyle tümleştirme sağlayan bir HostAuthenticationFilter da dahildir.

OWIN tümleştirmesiyle, SignalR gibi diğer OWIN ara yazılımıyla birlikte kendi işleminizde Web API'sini barındırabilirsiniz. Daha fazla bilgi için ASP.NET Web API'yi Kendi Kendine Barındırmak için OWIN Kullanma başlığına bakın.

ASP.NET SignalR 2.0

Aşağıdaki bölümlerde SignalR 2.0'ın özellikleri açıklanmaktadır.

Mevcut bir 1.x projesini SignalR 2.0'a yükseltme örneği için bkz . SignalR 1.x Projesini Yükseltme.

OWIN üzerine kurulmuştur

SignalR 2.0 tamamen OWIN (.NET için Açık Web Arabirimi) üzerine kurulmuştur. Bu değişiklik, SignalR için kurulum işlemini web'de barındırılan ve şirket içinde barındırılan SignalR uygulamaları arasında çok daha tutarlı hale getirir, ancak bir dizi API değişikliği de gerektirmiştir.

MapHubs ve MapConnection artık MapSignalR oldu

OWIN standartlarıyla uyumluluk için bu yöntemler olarak MapSignalRyeniden adlandırıldı. MapSignalR parametresiz olarak çağrılır, tüm hub'ları eşler (sürüm 1.x'te olduğu gibi MapHubs ); tek tek PersistentConnection nesnelerini eşlemek için, tür parametresi olarak bağlantı türünü ve ilk bağımsız değişken olarak bağlantının URL uzantısını belirtin.

MapSignalR yöntemi bir Owin başlangıç sınıfında çağrılır. Visual Studio 2013, Owin başlangıç sınıfı için yeni bir şablon içerir; bu şablonu kullanmak için aşağıdakileri yapın:

  1. Projeye sağ tıklayın
  2. Ekle, Yeni Öğe'yi seçin...
  3. Owin Başlangıç sınıfı'ni seçin. Yeni sınıf Startup.cs adlandırın.

Bir Web uygulamasında, yöntemini içeren MapSignalR Owin başlangıç sınıfı aşağıda gösterildiği gibi Web.Config dosyasının uygulama ayarları düğümündeki bir giriş kullanılarak Owin'in başlangıç işlemine eklenir.

Kendi kendini barındıran bir uygulamada, Başlatma sınıfı, WebApp.Start yönteminin tür parametresi olarak geçirilir.

SignalR 1.x'te eşleme hub'ları ve bağlantıları (web uygulamasındaki genel uygulama dosyasından):

protected void Application_Start(object sender, EventArgs e) 
{
    // Map all hubs to "/signalr"
    RouteTable.Routes.MapHubs();
    // Map the Echo PersistentConnection to "/echo"
    RouteTable.Routes.MapConnection<myconnection>("echo", "/echo");
}

SignalR 2.0'da eşleme hub'ları ve bağlantıları (Owin Startup sınıf dosyasından):

using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(MyWebApplication.Startup))]

namespace MyWebApplication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Map all hubs to "/signalr"
            app.MapSignalR();
            // Map the Echo PersistentConnection to "/echo"
            app.MapSignalR<echoconnection>("/echo");
        }
    }
}

Yerel olarak barındırılan bir uygulamada, WebApp.Start yöntemi için tür parametresi olarak Startup sınıfı aşağıda gösterildiği gibi geçirilir.

string url = "http://localhost:8080";
using (WebApp.Start<startup>(url))
{
    Console.WriteLine("Server running on {0}", url);
    Console.ReadLine();
}

Etki Alanları Arası Destek

SignalR 1.x'te etki alanları arası istekler tek bir EnableCrossDomain bayrağı tarafından denetlendi. Bu bayrak hem JSONP hem de CORS isteklerini denetledi. Daha fazla esneklik için tüm CORS desteği SignalR'nin sunucu bileşeninden kaldırılmıştır (Tarayıcı tarafından desteklendiği algılanırsa JavaScript istemcileri CORS'yi normal şekilde kullanmaya devam eder) ve bu senaryoları desteklemek için yeni OWIN ara yazılımı kullanıma sunulmuştur.

SignalR 2.0'da, istemcide JSONP gerekli olduğunda (eski tarayıcılarda etki alanları arası istekleri desteklemek için), aşağıda gösterildiği gibi EnableJSONPHubConfiguration nesnesine true olarak ayarlanarak açıkça etkinleştirilmesi gerekir. JSONP, CORS'den daha az güvenli olduğundan varsayılan olarak devre dışıdır.

SignalR 2.0'da yeni CORS ara yazılımını eklemek için Microsoft.Owin.Cors kitaplığını projenize ekleyin ve aşağıdaki bölümde gösterildiği gibi SignalR ara yazılımından önce UseCors çağırın.

Projenize Microsoft.Owin.Cors ekleme: Bu kitaplığı yüklemek için Paket Yöneticisi Konsolu'nda aşağıdaki komutu çalıştırın:

Install-Package Microsoft.Owin.Cors

Bu komut, paketin 2.0.0 sürümünü projenize ekler.

UseCors Çağırma

Aşağıdaki kod parçacıkları SignalR 1.x ve 2.0'da etki alanları arası bağlantıların nasıl uygulanduğunu göstermektedir.

SignalR 1.x'te etki alanları arası istekleri uygulama (genel uygulama dosyasından)

protected void Application_Start(object sender, EventArgs e) 
{
    var hubConfiguration = new HubConfiguration();
    hubConfiguration.EnableCrossDomain = true;
    RouteTable.Routes.MapHubs(hubConfiguration);
}

SignalR 2.0'da etki alanları arası istekleri uygulama (C# kod dosyasından)

Aşağıdaki kod, SignalR 2.0 projesinde CORS veya JSONP'nin nasıl etkinleştirileceği gösterilmektedir. Bu kod örneği MapSignalR yerine Map ve RunSignalR kullanır, böylece CORS ara yazılımı yalnızca CORS desteği gerektiren SignalR istekleri için çalışır (yani, MapSignalR içinde belirtilen yoldaki tüm trafik için değil). Map de uygulamanın tamamı yerine belirli bir URL ön eki için çalıştırılması gereken diğer ara yazılımlar için kullanılabilir.

using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Cors;
using Owin;

[assembly: OwinStartup(typeof(MyWebApplication.Startup))]

namespace MyWebApplication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Branch the pipeline here for requests that start with "/signalr"
            app.Map("/signalr", map =>
            {
                // Setup the CORS middleware to run before SignalR.
                // By default this will allow all origins. You can 
                // configure the set of origins and/or http verbs by
                // providing a cors options with a different policy.
                map.UseCors(CorsOptions.AllowAll);
                var hubConfiguration = new HubConfiguration 
                {
                    // You can enable JSONP by uncommenting line below.
                    // JSONP requests are insecure but some older browsers (and some
                    // versions of IE) require JSONP to work cross domain
                    // EnableJSONP = true
                };
                // Run the SignalR pipeline. We're not using MapSignalR
                // since this branch already runs under the "/signalr"
                // path.
                map.RunSignalR(hubConfiguration);
            });
        }
    }
}

MonoTouch ve MonoDroid aracılığıyla iOS ve Android desteği

Önemli

Xamarin.Android, Xamarin.iOS, Xamarin.Mac artık android için .NET, iOS için .NET ve macOS için .NET olarak doğrudan .NET ile tümleştirilmiş (.NET 6'dan başlayarak). Eğer bugün bu proje türleriyle çalışıyorsanız, tam destek için projelerinizin .NET SDK stili projelere güncellenmesi gerekir. Xamarin projelerini .NET'e yükseltme hakkında daha fazla bilgi için Xamarin'den .NET'e yükseltme & .NET MAUI belgelerine bakın.

Xamarin kitaplığından MonoTouch ve MonoDroid bileşenleri kullanan iOS ve Android istemcileri için destek eklendi. Bunların nasıl kullanılacağı hakkında daha fazla bilgi için bkz . Xamarin Bileşenlerini Kullanma. SignalR RTW sürümü kullanılabilir olduğunda bu bileşenler Xamarin Store'da kullanılabilir olacaktır.

### Taşınabilir .NET istemcisi

Platformlar arası geliştirmeyi daha iyi kolaylaştırmak için Silverlight, WinRT ve Windows Phone istemcileri, aşağıdaki platformları destekleyen tek bir taşınabilir .NET istemcisiyle değiştirilmiştir:

  • NET 4.5
  • Silverlight 5
  • WinRT (Windows Mağazası Uygulamaları için.NET)
  • Windows Phone 8

Yeni Öz Barındırma Paketi

Artık SignalR'ı Kendi Başına Barındırma (web sunucusunda barındırılmak yerine bir işlemde veya başka bir uygulamada barındırılan SignalR uygulamaları) kullanmaya başlamayı kolaylaştıran bir NuGet paketi mevcut. SignalR 1.x ile oluşturulan kendi kendine bir projeyi yükseltmek için Microsoft.AspNet.SignalR.Owin paketini kaldırın ve Microsoft.AspNet.SignalR.SelfHost paketini ekleyin. Kendi kendine konaklama paketiyle çalışmaya başlamak hakkında daha fazla bilgi için bkz. Tutorial: SignalR Kendi Kendine Ana Bilgisayar.

Geriye dönük uyumlu sunucu desteği

SignalR'nin önceki sürümlerinde, istemcide kullanılan SignalR paketinin sürümleri ve sunucunun aynı olması gerekiyordu. SignalR 2.0, güncelleştirilmesi zor olan kalın istemci uygulamalarını desteklemek için artık eski bir istemciyle daha yeni bir sunucu sürümü kullanmayı destekliyor. Not: SignalR 2.0, daha yeni istemcilerle eski sürümlerle oluşturulmuş sunucuları desteklemez.

.NET 4.0 için sunucu desteği kaldırıldı

SignalR 2.0, .NET 4.0 ile sunucu birlikte çalışabilirliği desteğini bıraktı. .NET 4.5, SignalR 2.0 sunucularında kullanılmalıdır. SignalR 2.0 için hala bir .NET 4.0 istemcisi var.

İstemciler ve gruplar listesine ileti gönderme

SignalR 2.0'da istemci ve grup kimliklerinin listesini kullanarak ileti göndermek mümkündür. Aşağıdaki kod parçacıkları bunun nasıl yapılacağını gösterir.

PersistentConnection kullanarak istemci ve grup listesine ileti gönderme

using Microsoft.AspNet.SignalR;
using System.Collections.Generic;
public class ChatConnection : PersistentConnection
{
    static List<string> ConnectionIds = new List<string>();
    static List<string> groups = new List<string>{"chatGroup", "chatGroup2"};
    protected override System.Threading.Tasks.Task OnReceived(IRequest request, string connectionId, string data)
    {
        Connection.Send(ConnectionIds, data);
        Groups.Send(groups, data);
        return base.OnReceived(request, connectionId, data);
    }
    protected override System.Threading.Tasks.Task OnConnected(IRequest request, string connectionId)
    {
        ConnectionIds.Add(connectionId);
        Groups.Add(connectionId, "chatGroup");
        return base.OnConnected(request, connectionId);
    }
    protected override System.Threading.Tasks.Task OnDisconnected(IRequest request, string connectionId)
    {
        ConnectionIds.Remove(connectionId);
        return base.OnDisconnected(request, connectionId);
    }
}

Hub'ları kullanarak istemci ve grup listesine ileti gönderme

using Microsoft.AspNet.SignalR;
using System.Collections.Generic;
public class ChatHub : Hub
{
    static List<string> ConnectionIds = new List<string>();
    static List<string> groups = new List<string> { "chatGroup", "chatGroup2" };
    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.Clients(ConnectionIds).broadcastMessage(name, message);
        Clients.Groups(groups).broadcastMessage(name, message);
    }
    public override System.Threading.Tasks.Task OnConnected()
    {
        ConnectionIds.Add(Context.ConnectionId);
        Groups.Add(Context.ConnectionId, "chatGroup");
        return base.OnConnected();
    }
    public override System.Threading.Tasks.Task OnDisconnected()
    {
        ConnectionIds.Remove(Context.ConnectionId);
        return base.OnDisconnected();
    }
}

Belirli bir kullanıcıya ileti gönderme

Bu özellik, kullanıcıların yeni bir IUserIdProvider arabirimi aracılığıyla bir IRequest'i temel alan userId değerini belirtmesine olanak tanır:

IUserIdProvider arabirimi

public interface IUserIdProvider
{
    string GetUserId(IRequest request);
}

Varsayılan olarak, kullanıcı adı olarak kullanıcının IPrincipal.Identity.Name kullanan bir uygulama olacaktır.

Hub'larda, yeni bir API aracılığıyla bu kullanıcılara ileti gönderebileceksiniz:

Clients.User API'sini kullanma

public class MyHub : Hub
{
    public void Send(string userId, string message)
    {
        Clients.User(userId).send(message);
    }
}

Daha İyi Hata İşleme Desteği

Kullanıcılar artık herhangi bir hub çağrısından HubException oluşturabilir. HubException oluşturucusu, bir dize mesajı ve bir nesne formundaki ek hata verilerini alabilir. SignalR, hatayı otomatik olarak seri hale getirerek istemciye gönderir ve burada hub yöntemi çağrısını reddetmek veya başarısız kılmak için kullanılır.

Ayrıntılı hub özel durumlarını göster ayarının istemciye geri gönderilen veya gönderilmeyen HubException ile hiçbir ilgisi yoktur; her zaman gönderilir.

İstemciye HubException göndermeyi gösteren sunucu tarafı kodu

public class MyHub : Hub
{
    public void Send(string message)
    {
        if(message.Contains("<script>"))
        {
            throw new HubException("This message will flow to the client", new { user = Context.User.Identity.Name, message = message });
        }

        Clients.All.send(message);
    }
}

Sunucudan gönderilen HubException'a yanıt vermeyi gösteren JavaScript istemci kodu

myHub.server.send("<script>")
            .fail(function (e) {
                if (e.source === 'HubException') {
                    console.log(e.message + ' : ' + e.data.user);
                }
            });

Sunucudan gönderilen bir HubException'a yanıt vermeyi gösteren .NET istemci kodu

try
{
    await myHub.Invoke("Send", "<script>");
}
catch(HubException ex)
{
    Conosle.WriteLine(ex.Message);
}

Hub'ların birim testlerini daha kolay hale getirme

SignalR 2.0, sahte istemci tarafı çağrıları oluşturmayı kolaylaştıran IHubCallerConnectionContext adlı Hubs arabirimini içerir. Aşağıdaki kod parçaları, popüler test araçları xUnit.net ve moq ile bu arabirimin nasıl kullanıldığını gösterir.

xUnit.net ile SignalR birim testi

[Fact]
public void HubsAreMockableViaDynamic()
{
    bool sendCalled = false;
    var hub = new MyHub();
    var mockClients = new Mock<IHubCallerConnectionContext>();
    hub.Clients = mockClients.Object;
    dynamic all = new ExpandoObject();
    all.send = new Action<string>(message =>
    {
        sendCalled = true;
    });
    mockClients.Setup(m => m.All).Returns((ExpandoObject)all);
    hub.Send("foo");
    Assert.True(sendCalled);
}

Moq ile SignalR birim testi

[Fact]
public interface IClientContract
{
    void send(string message);
}
public void HubsAreMockableViaType()
{
    var hub = new MyHub();
    var mockClients = new Mock<IHubCallerConnectionContext>();
    var all = new Mock<IClientContract>();
    hub.Clients = mockClients.Object;
    all.Setup(m => m.send(It.IsAny<string>())).Verifiable();
    mockClients.Setup(m => m.All).Returns(all.Object);
    hub.Send("foo");
    all.VerifyAll();

JavaScript hata işleme

SignalR 2.0'da tüm JavaScript hata işleme geri çağırmaları ham dizeler yerine JavaScript hata nesneleri döndürür. Bu, SignalR'nin hata işleyicilerinize daha zengin bilgiler akmasına olanak tanır. Hatanın source özelliğinden iç istisnayı alabilirsiniz.

Start.Fail özel durumunu işleyen JavaScript istemci kodu

connection.start().fail(function(e) {
    console.log('The error is: ' + e.message);
});

ASP.NET Kimlik

Yeni ASP.NET Üyelik Sistemi

ASP.NET Identity, ASP.NET uygulamaları için yeni üyelik sistemidir. ASP.NET Identity, kullanıcıya özgü profil verilerini uygulama verileriyle tümleştirmeyi kolaylaştırır. ASP.NET Kimliği, uygulamanızdaki kullanıcı profilleri için kalıcılık modelini seçmenize de olanak tanır. Verileri bir SQL Server veritabanında veya Azure Depolama Tabloları gibi NoSQL veri depoları da dahil olmak üzere başka bir veri deposunda depolayabilirsiniz. Daha fazla bilgi için bkz. Visual Studio 2013'te ASP.NET Web Projeleri Oluşturma'daki Bireysel Kullanıcı Hesapları.

Talep tabanlı kimlik doğrulaması

ASP.NET artık kullanıcının kimliğinin güvenilen bir verenden gelen talep kümesi olarak temsil edildiği talep tabanlı kimlik doğrulamasını destekliyor. Kullanıcıların kimlik doğrulaması, uygulama veritabanında tutulan bir kullanıcı adı ve parola kullanılarak veya sosyal kimlik sağlayıcıları (örneğin: Microsoft Hesapları, Facebook, Google, Twitter) veya Azure Active Directory veya Active Directory Federasyon Hizmetleri (AD FS) (ADFS) aracılığıyla kuruluş hesapları kullanılarak doğrulanabilir.

Azure Active Directory ve Windows Server Active Directory ile tümleştirme

Artık kimlik doğrulaması için Azure Active Directory veya Windows Server Active Directory (AD) kullanan ASP.NET projeleri oluşturabilirsiniz. Daha fazla bilgi için bkz. Visual Studio 2013'te ASP.NET Web Projeleri Oluşturma bölümünde Kuruluş Hesapları.

OWIN Entegrasyonu

ASP.NET kimlik doğrulaması artık OWIN tabanlı herhangi bir konakta kullanılabilen OWIN ara yazılımını temel alır. OWIN hakkında daha fazla bilgi için aşağıdaki Microsoft OWIN Bileşenleri bölümüne bakın.

Microsoft OWIN Bileşenleri

.NET için Açık Web Arabirimi (OWIN), .NET web sunucuları ve web uygulamaları arasında bir soyutlama tanımlar. OWIN, web uygulamasını sunucudan ayrıştırarak web uygulamalarını konaktan bağımsız hale getirir. Örneğin, OWIN tabanlı bir web uygulamasını IIS'de barındırabilir veya özel bir işlemde kendi kendine barındırabilirsiniz.

Microsoft OWIN bileşenlerinde (Katana projesi olarak da bilinir) sunulan değişiklikler arasında yeni sunucu ve konak bileşenleri, yeni yardımcı kitaplıklar ve ara yazılım ve yeni kimlik doğrulama ara yazılımı yer alır.

OWIN ve Katana hakkında daha fazla bilgi için bkz . OWIN ve Katana'daki yenilikler.

Not: OWIN uygulamaları IIS klasik modunda çalıştırılamaz; tümleşik modda çalıştırılmalıdır.

Not: OWIN uygulamaları tam güven içinde çalıştırılmalıdır.

Yeni Sunucular ve Hostlar

Bu sürümle, kendi kendine konak senaryolarını etkinleştirmek için yeni bileşenler eklendi. Bu bileşenler aşağıdaki NuGet paketlerini içerir:

  • Microsoft.Owin.Host.HttpListener. HTTP isteklerini dinlemek ve onları OWIN işlem hattına yönlendirmek için HttpListener kullanan bir OWIN sunucusu sağlar.
  • Microsoft.Owin.Hosting Konsol uygulaması veya Windows hizmeti gibi özel bir işlemde bir OWIN işlem hattını kendi kendine barındırmak isteyen geliştiriciler için bir kitaplık sağlar.
  • OwinHost. Microsoft.Owin.Hosting kapsayan ve özel bir konak uygulaması yazmak zorunda kalmadan bir OWIN işlem hattını kendi kendine barındırmanıza olanak tanıyan bağımsız bir yürütülebilir dosya sunar.

Buna ek olarak, Microsoft.Owin.Host.SystemWeb paket artık ara yazılımın SystemWeb sunucusuna belirli bir ASP.NET işlem hattı aşamasında ara yazılımın çağrılması gerektiğini belirten ipuçları sağlamasına olanak tanır. Bu özellik, ASP.NET işlem hattının erken aşamalarında çalışması gereken kimlik doğrulama ara yazılımı için özellikle kullanışlıdır.

Yardımcı Kitaplıklar ve Ara Yazılım

OWIN belirtiminden yalnızca işlev ve tür tanımlarını kullanarak OWIN bileşenleri yazabilirsiniz, ancak yeni Microsoft.Owin paket daha kullanıcı dostu bir soyutlama kümesi sağlar. Bu paket, daha önceki birkaç paketi (örneğin, Owin.Extensions, Owin.Types) diğer OWIN bileşenleri tarafından kolayca kullanılabilen, iyi yapılandırılmış tek bir nesne modeli olarak birleştirir. Aslında, Microsoft OWIN bileşenlerinin çoğu artık bu paketi kullanıyor.

Not

OWIN uygulamaları IIS klasik modunda çalıştırılamaz; tümleşik modda çalıştırılmalıdır.

Not

OWIN uygulamaları tam güven içinde çalıştırılmalıdır.

Bu sürüm, çalışan bir OWIN uygulamasını doğrulamak için ara yazılımı ve hataları araştırmaya yardımcı olmak için hata sayfası ara yazılımını içeren Microsoft.Owin.Diagnostics paketini de içerir.

Kimlik Doğrulama Bileşenleri

Aşağıdaki kimlik doğrulama bileşenleri kullanılabilir.

  • Microsoft.Owin.Security.ActiveDirectory. Şirket içi veya bulut tabanlı dizin hizmetlerini kullanarak kimlik doğrulamasını etkinleştirir.
  • Microsoft.Owin.Security.Cookies çerezleri kullanarak kimlik doğrulamasını etkinleştirir. Bu paket daha önce olarak adlandırılmıştı Microsoft.Owin.Security.Forms.
  • Microsoft.Owin.Security.Facebook Facebook'un OAuth tabanlı hizmetini kullanarak kimlik doğrulamasını etkinleştirir.
  • Microsoft.Owin.Security.Google Google'ın OpenID tabanlı hizmetini kullanarak kimlik doğrulamasını etkinleştirir.
  • Microsoft.Owin.Security.Jwt JWT belirteçlerini kullanarak kimlik doğrulamasını etkinleştirir.
  • Microsoft.Owin.Security.MicrosoftAccount Microsoft hesaplarını kullanarak kimlik doğrulamasını etkinleştirir.
  • Microsoft.Owin.Security.OAuth. Taşıyıcı belirteçlerinin kimliğini doğrulamak için bir OAuth yetkilendirme sunucusu ve ara yazılım sağlar.
  • Microsoft.Owin.Security.Twitter Twitter'ın OAuth tabanlı hizmetini kullanarak kimlik doğrulamasını etkinleştirir.

Bu sürüm, çıkış noktaları arası HTTP isteklerini işlemeye yönelik ara yazılımı içeren paketi de içerir Microsoft.Owin.Cors .

Not

Visual Studio 2013'ün son sürümünde JWT imzalama desteği kaldırıldı.

Entity Framework 6

Entity Framework 6'daki yeni özelliklerin ve diğer değişikliklerin listesi için bkz . Entity Framework Sürüm Geçmişi.

ASP.NET Razor 3

ASP.NET Razor 3 aşağıdaki yeni özellikleri içerir:

  • Sekme düzenleme desteği. Daha önce, Visual Studio'da Belgeyi Biçimlendir komutu, otomatik girintileme ve otomatik biçimlendirme, Sekmeleri Koru seçeneği kullanılırken düzgün çalışmıyor. Bu değişiklik, sekme biçimlendirmesi için Razor kodu için Visual Studio biçimlendirmesini düzeltmektedir.
  • Bağlantılar oluşturulurken URL Yeniden Yazma kuralları desteği.
  • Güvenlik şeffaf özniteliğinin kaldırılması.

    Not

    Bu, uyumluluğu bozan bir değişikliktir ve Razor 3'ü MVC4 ve öncesi ile uyumsuz hale getirirken, Razor 2, MVC5 veya MVC5'e karşı derlenmiş derlemelerle uyumluluğunu yitirir.

=======

ASP.NET Uygulama Askıya Alma

ASP.NET Uygulama Askıya Alma, .NET Framework 4.5.1'de çok sayıda ASP.NET sitesini tek bir makinede barındırmak için kullanıcı deneyimini ve ekonomik modeli kökten değiştiren, oyun değiştiren bir özelliktir. Daha fazla bilgi için bkz ASP.NET Uygulama Askıya Alma – duyarlı paylaşılan .NET web barındırma.

Bilinen Sorunlar ve Yeni Değişiklikler

Bu bölümde Visual Studio 2013 için ASP.NET ve Web Araçları'ndaki bilinen sorunlar ve hataya neden olan değişiklikler açıklanmaktadır.

NuGet

  • Yeni paket geri yükleme, SLN dosyası kullanılırken Mono üzerinde çalışmaz; yaklaşan bir nuget.exe indirme ve NuGet.CommandLine paket güncelleştirmesinde düzeltilecektir.
  • Yeni paket geri yükleme, Wix projeleriyle çalışmaz; yaklaşan bir nuget.exe indirme ve NuGet.CommandLine paket güncelleştirmesinde düzeltilecektir.

ASP.NET Web API

  1. ODataQueryOptions<T>.ApplyTo(IQueryable) her zaman IQueryable<T> geri dönmez, çünkü $select ve $expand için destek ekledik.

    ODataQueryOptions<T> için önceki örneklerimiz her zaman dönüş değerini ApplyTo 'den IQueryable<T> 'ye çevirdi. Daha önce desteklediğimiz sorgu seçenekleri ($filter, $orderby, $skip, $top) sorgunun şeklini değiştirmediği için bu daha önce çalıştı. Artık $select ve $expand desteklediğimiz için, ApplyTo değerinden döndürülen değer her zaman IQueryable<T> olmayacaktır.

    // Sample ODataQueryOptions<T> usage from earlier
    public IQueryable<Customer> Get(ODataQueryOptions<Customer> query)
    {
        IQueryable<customer> result="query.ApplyTo(_customers)" as iqueryable<customer>; return result;
    }
    

    Daha önceki örnek kodu kullanıyorsanız, istemci $select ve $expand göndermediği takdirde çalışmaya devam eder. Ancak, $select ve $expand desteklemek istiyorsanız, bu kodu şu kodla değiştirmeniz gerekir.

    public IHttpActionResult Get(ODataQueryOptions<Customer> query)
    {
        IQueryable result = query.ApplyTo(_customers);
        return Ok(result, result.GetType());
    }
     
    private IHttpActionResult Ok(object content, Type type)
    {
        Type resultType = typeof(OkNegotiatedContentResult<>).MakeGenericType(type);
        return Activator.CreateInstance(resultType, content, this) as IHttpActionResult;
    }
    
  2. Toplu istek sırasında Request.Url veya RequestContext.Url değeri null olarak bulunmakta

    Toplu işlem senaryosunda, UrlHelper, Request.Url veya RequestContext.Url üzerinden erişildiğinde null değerindedir.

    Bu sorunun geçici çözümü, aşağıdaki örnekte olduğu gibi yeni bir UrlHelper örneği oluşturmaktır:

    UrlHelper'ın yeni bir örneğini oluşturma

    if (RequestContext.Url == null)
    {
        RequestContext.Url = new UrlHelper(Request);
    }
    

ASP.NET MVC

  1. MVC5 ve OrgAuth kullanırken, AntiForgerToken doğrulaması yapan görünümleriniz varsa, görünüme veri gönderdiğinizde aşağıdaki hatayla karşılaşabilirsiniz:

    Hata:

    '/' Uygulamasında Sunucu Hatası.

    ClaimsIdentity'de http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier türünde veya https://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider türünde bir talep yoktu. Talep tabanlı kimlik doğrulamasıyla sahtecilik karşıtı belirteç desteğini etkinleştirmek için, yapılandırılan talep sağlayıcısının oluşturduğu ClaimsIdentity örneklerinde bu talep türlerini sağladığını doğrulayın. Yapılandırılan talep sağlayıcısı bunun yerine benzersiz tanımlayıcı olarak farklı bir talep türü kullanıyorsa, AntiForgeryConfig.UniqueClaimTypeIdentifier statik özelliği ayarlanarak yapılandırılabilir.

    Geçici çözüm:

    Düzeltmek için Global.asax içine aşağıdaki satırı ekleyin:

    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;

    Bu, sonraki sürüm için düzeltilecektir.

  2. MVC4 uygulamasını MVC5'e yükselttikten sonra çözümü derleyin ve başlatın. Aşağıdaki hatayı görmeniz gerekir:

    [A]System.Web.WebPages.Razor.Configuration.HostSection , [B]System.Web.WebPages.Razor.Configuration.HostSection'a dönüştürülemez. Tür A kaynağı: 'System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' bağlamında 'Default' konumunda 'C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'. B türü, 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' konumundaki 'Default' bağlamında 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\6d05bbd0\e8b5908e\assembly\dl3\c9cbca63\f8910382_6273ce01\System.Web.WebPages.Razor.dll' dosyası içinde bulunur.

    Yukarıdaki hatayı düzeltmek için projenizdeki tüm Web.config dosyalarını (Görünümler klasöründekiler dahil) açın ve aşağıdakileri yapın:

    1. "System.Web.Mvc" sürümünün "4.0.0.0" sürümünün tüm oluşumlarını "5.0.0.0" olarak güncelleştirin.

    2. "System.Web.Helpers", "System.Web.WebPages" ve "System.Web.WebPages.Razor" bileşenlerinin "2.0.0.0" sürümünün tüm örneklerini "3.0.0.0" sürümüne güncelleyin.

      Örneğin, yukarıdaki değişiklikleri yaptıktan sonra derleme bağlamaları şöyle görünmelidir:

      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      

      MVC 4 projelerini MVC 5'e yükseltme hakkında bilgi için bkz ASP.NET MVC 4 ve Web API Projesini ASP.NET MVC 5 ve Web API 2'ye Yükseltme.

  3. jQuery Engelleyici Olmayan Doğrulama ile istemci tarafı doğrulama kullanılırken, type='number' içeren bir HTML giriş öğesi için doğrulama iletisi bazen yanlıştır. Geçerli bir sayının gerekli olduğunu belirten doğru ileti yerine geçersiz bir sayı girildiğinde, gerekli değerin doğrulama hatası ("Yaş alanı gereklidir") gösterilir.

    Bu sorun, Oluşturma ve Düzenleme görünümlerinde tamsayı özelliğine sahip bir model için yapı iskelesi oluşturulmuş kodda yaygın olarak bulunur.

    Bu sorunu geçici olarak çözmek için düzenleyici yardımcısını aşağıdaki gibi değiştirin:

    @Html.EditorFor(person => person.Age)

    Hedef:

    @Html.TextBoxFor(person => person.Age)

  4. ASP.NET MVC 5 artık kısmi güveni desteklemez. MVC veya WebAPI ikili dosyalarına bağlanan projeler SecurityTransparent özniteliğini ve AllowPartiallyTrustedCallers özniteliğini kaldırmalıdır. Bu özniteliklerin kaldırılması aşağıdaki gibi derleyici hatalarını ortadan kaldırır.

    Attempt by security transparent method ‘MyComponent' to access security critical type 'System.Web.Mvc.MvcHtmlString' failed. Assembly 'PagedList.Mvc, Version=4.3.0.0, Culture=neutral, PublicKeyToken=abbb863e9397c5e1' is marked with the AllowPartiallyTrustedCallersAttribute, and uses the level 2 security transparency model. Level 2 transparency causes all methods in AllowPartiallyTrustedCallers assemblies to become security transparent by default, which may be the cause of this exception.

    Bunun yan etkisi olarak aynı uygulamada 4.0 ve 5.0 derlemelerini kullanamayacağınızı unutmayın. Tümünü 5.0 olarak güncelleştirmeniz gerekir.

Web sitesi intranet bölgesinde barındırılırken Facebook yetkilendirmeli SPA Şablonu IE'de istikrarsızlıklara neden olabilir

SPA şablonu, Facebook ile dış oturum açma sağlar. Şablonla oluşturulan proje yerel olarak çalışırken, oturum açmak IE'nin kilitlenmesine neden olabilir.

Çözüm:

  1. Web sitesini internet bölgesinde barındırın; veya

  2. Senaryoyu IE dışında bir tarayıcıda test edin.

Web Forms İskelesi

Web Forms İskelesi VS2013'ten kaldırılmıştır ve Visual Studio'ya gelecek bir güncelleştirmede kullanıma sunulacaktır. Ancak, MVC bağımlılıkları ekleyerek ve MVC için iskele oluşturarak bir Web Forms projesinde yapı iskelesi kullanmaya devam edebilirsiniz. Projeniz Web Forms ve MVC'nin bir birleşimini içerir.

Web Forms projenize MVC eklemek için yeni bir yapı iskelesi öğesi ekleyin ve MVC 5 Bağımlılıkları'na tıklayın. Betikler gibi tüm içerik dosyalarına ihtiyacınız olup olmadığına bağlı olarak En Az veya Tam'ı seçin. Ardından, MVC için projenizde görünümler ve kontrolör oluşturacak bir iskelet öğesi ekleyin.

MVC ve Web API İskelesi - HTTP 404, Bulunamadı hatası

Bir projeye şablonlu bir öğe eklemeye çalışırken bir hatayla karşılaşılırsa, projeniz tutarsız bir durumda bırakılabilir. yapı iskeleleri ile yapılan bazı değişiklikler geri alınır, ancak yüklü NuGet paketleri gibi diğer değişiklikler geri alınmaz. Yönlendirme yapılandırması değişiklikleri geri alınırsa, kullanıcılar yapılandırma iskeleti oluşturulmuş öğelere gezinirken HTTP 404 hatası alır.

Geçici çözüm:

  • MVC'de bu hatayı düzeltmek için yeni bir yapı iskelesi öğesi ekleyin ve MVC 5 Bağımlılıkları (En Az veya Tam) öğesini seçin. Bu işlem, projenize tüm gerekli değişiklikleri ekler.

  • Web API'sinde bu hatayı düzeltmek için:

    1. WebApiConfig sınıfını projenize ekleyin.

      public static class WebApiConfig
      {
          public static void Register(HttpConfiguration config)
          {
              config.MapHttpAttributeRoutes();
              config.Routes.MapHttpRoute(
                  name: "DefaultApi",
                  routeTemplate: "api/{controller}/{id}",
                  defaults: new { id = RouteParameter.Optional }
              );
          }
      }
      
      Public Module WebApiConfig
          Public Sub Register(ByVal config As HttpConfiguration)
              config.MapHttpAttributeRoutes()
              config.Routes.MapHttpRoute(
                name:="DefaultApi",
                routeTemplate:="api/{controller}/{id}",
                defaults:=New With {.id = RouteParameter.Optional}
              )
          End Sub
      End Module
      
    2. Global.asax dosyasındaki Application_Start yönteminde WebApiConfig.Register'ı aşağıdaki gibi yapılandırın:

      public class WebApiApplication : System.Web.HttpApplication
      {
          protected void Application_Start()
          {
              GlobalConfiguration.Configure(WebApiConfig.Register);    
          }
      }
      
      Public Class WebApiApplication
           Inherits System.Web.HttpApplication
       
           Sub Application_Start()     
             GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)       
           End Sub
      End Class