ASP.NET: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m rilasciato -> pubblicato |
|||
(40 versioni intermedie di 29 utenti non mostrate) | |||
Riga 16:
|SoftwareLibero = si
|Lingua =
}}
'''ASP.NET''' è un
È stato pubblicato per la prima volta nel gennaio 2002<ref>{{Cita web|url=https://umbraco.com/knowledge-base/aspnet/|titolo=What is ASP.NET? {{!}} The Open Source Web Framework|sito=umbraco.com|lingua=en|accesso=4 maggio 2022}}</ref> con la versione 1.0 del [[.NET Framework]] ed è il successore della tecnologia [[Active Server Pages]] (ASP) di Microsoft. ASP.NET è costruito sul [[Common Language Runtime]] (CLR), permettendo ai programmatori di scrivere codice ASP.NET usando qualsiasi linguaggio .NET supportato. Il framework di estensione ASP.NET [[SOAP]] permette ai componenti ASP.NET di elaborare messaggi SOAP.
Il successore di ASP.NET è ASP.NET Core. È una reimplementazione di ASP.NET come [[framework per applicazioni web]] modulare, insieme ad altri framework come [[Entity Framework]]. Il nuovo framework usa il nuovo progetto open-source .NET Compiler Platform (nome in codice "Roslyn") ed è [[multipiattaforma]]. [[ASP.NET MVC Framework|ASP.NET MVC]], ASP.NET Web API, e ASP.NET Web Pages (una piattaforma che usa solo pagine Razor) si sono fusi in un MVC 6 unificato<ref>{{Cita web|url=https://docs.microsoft.com/en-us/aspnet/core/|titolo=ASP.NET documentation|autore=wadepickett|sito=docs.microsoft.com|lingua=en|accesso=4 maggio 2022}}</ref>.
== Principi su cui si basa ASP.NET ==
Sebbene il nome ASP.NET derivi da [[Active Server Pages|ASP]] (''Active Server Pages'') (la vecchia tecnologia per lo sviluppo web di [[Microsoft]]), esistono sostanziali differenze fra le due. Infatti ASP.NET si basa, come tutte le applicazioni della famiglia [[Microsoft .NET]], sul [[Common Language Runtime|CLR]] (''Common Language Runtime).''
Gli sviluppatori possono scrivere codice utilizzando uno qualsiasi dei linguaggi di alto livello supportati dal [[framework]] (libreria di classi) [[.NET Framework|.NET]], come
ASP.NET si propone di semplificare la migrazione degli sviluppatori dalle applicazioni [[Windows]] alle applicazioni web mettendoli in grado di generare pagine composte da tanti controlli [[widget (informatica)|widget]], del tutto simili a quelli usati dall'[[interfaccia utente]] di Windows.
Un controllo web, come ad esempio un ''pulsante'' o un
== Paradigma di programmazione di ASP.NET ==
ASP.NET è progettato in modo da incoraggiare lo sviluppatore ad usare in modo sistematico il [[Paradigma di programmazione|paradigma]] dell'[[interfaccia grafica]] (''GUI, per Graphical User Interface'') abbinato alla cosiddetta [[programmazione ad eventi]] (''event-driven''), cioè allo stile di programmazione in cui i vari blocchi di codice vengono eseguiti in risposta a determinati ''eventi'', o azioni, su controlli dotati di rappresentazione grafica sul [[Desktop environment|desktop]].
Lo stile convenzionale dei linguaggi per lo sviluppo di applicazioni web si era invece finora basato sulla tecnica dello [[scripting]]. Le classi della libreria Framework
La libreria di classi Framework
Questo tipo di compilazione è ben diverso da linguaggi come ad esempio [[Java (linguaggio di programmazione)|Java]], nei quali invece tutto il codice gira su una vera e propria [[macchina virtuale]], mentre in .NET al momento dell'esecuzione il programma è effettivamente in linguaggio macchina come tutti gli altri linguaggi.
Line 58 ⟶ 61:
== Critiche ad ASP.NET ==
ASP e ASP.NET possono girare insieme nella stessa applicazione web. Questo approccio consente agli sviluppatori di migrare da un ambiente all'altro gradualmente invece che tutto in una volta. Con [[Internet Information Services|IIS]] 6.0 e versioni precedenti, le pagine scritte usando versioni precedenti del framework ASP non possono condividere la stessa sessione senza l'uso di librerie di terze parti. Questa limitazione non esiste per applicazioni ASP.NET e ASP che girano insieme sotto [[Internet Information Services|IIS]] 7. In alcuni casi durante il runtime ASP.NET ricicla il processo attivo, provocando l'occupazione di più del 60% della memoria disponibile. Si può configurare in modo che il riciclo avvenga solo dopo un certo numero di richieste, dopo un certo tempo, ecc. Tuttavia così facendo l'utilizzatore può perdere lo stato della sessione corrente. Se l'applicazione usa lo stato della sessione per caricare le informazioni di autenticazione (cattiva pratica poiché l'autenticazione basata sui cookie e membership è un'opzione disponibile già integrata nel framework) e se l'applicazione è configurata per usare sessioni in-process, l'utente può essere disconnesso se il processo viene riciclato.https://mobikul.com/erp-app-development/
== Esempio di codice ==
Segue il codice sorgente che genera il classico messaggio minimo:<syntaxhighlight lang="asp" line="1">
<%@ Page Language="C#" %>
<HTML>
<HEAD>
<TITLE> Esempio di pagina ASPX </TITLE>
<DIV STYLE="TEXT-ALIGN:CENTER">
<%
int mciclo;
String mstringa = "";
for (mciclo = 1; mciclo <= 10; mciclo++) {
mstringa = mstringa + String.Format("<SPAN STYLE='FONT-SIZE: {0}PX'> Hello world in ASP.NET </SPAN><br />", mciclo);
}
Message.InnerHtml = mstringa;
%>
<SPAN id = "Message" runat="server"/>
</DIV>
</BODY>
</HTML>
</syntaxhighlight>I nomi dei file ASP.NET hanno estensione ''.aspx''. La direttiva ''Page'' consente di specificare il linguaggio utilizzato (nell'esempio C#), e numerosi altri attributi che consentono di descrivere le proprietà e l'aspetto della pagina. Ogni pagina aspx può contenere una sola direttiva ''Page''. Notare che le righe di codice di esempio che seguono la direttiva ''Page'' sono normale codice HTML.
Vengono dichiarate 2 variabili: l'intero ''mciclo'' e la stringa denominata ''mstringa'', e viene definito un ciclo ''for'' per visualizzare il messaggio con caratteri di dimensione crescente da 1 e 10. La variabile ''mstringa'' memorizza il codice HTML da visualizzare. Al termine del ciclo viene settata la proprietà ''InnerHtml'' dell'oggetto ''Message''.
Il tag <code><nowiki><SPAN></nowiki></code> è dotato dell'attributo ''<code>runat</code>'' che indica che l'elemento deve essere eseguito ''lato Server'', come avviene tipicamente nelle applicazioni sviluppate in ASP.NET.
== Strumenti di sviluppo ==
Line 115 ⟶ 110:
== ASP.NET 3.5 ==
ASP.NET 3.0 non è mai esistito. Microsoft ha infatti usato il nome ".NET Framework 3.0" per distribuire un insieme di nuove tecnologie: WPF ([[Windows Presentation Foundation]]), WCF ([[Windows Communication Foundation]]) e WF ([[Windows Workflow Foundation]]). Tuttavia .NET Framework 3.0 non include una nuova versione della CLR o di ASP.NET. Rispetto alla versione 2.0, la versione 3.5 di ASP.NET può essere considerata una graduale evoluzione; in particolare le nuove funzionalità si concentrano in tre aree: [[LINQ]], [[AJAX]] e [[Silverlight]].
== Sicurezza ==
Un sito web in ASP.NET può essere soggetto ad attacchi hacker<ref>{{Cita web|url=https://www.business2community.com/cybersecurity/9-ways-hackers-exploit-asp-net-and-how-to-prevent-them-02353604|titolo=9 Ways Hackers Exploit ASP.NET – and How to Prevent Them|sito=Business 2 Community|accesso=28 gennaio 2021}}</ref>:
* Configurazione errata delle opzioni di sicurezza
* [[Cross-site request forgery|Cross-Site Request Forgery]] (CSRF): consente a un utente malintenzionato di forzare un utente convalidato e connesso a eseguire azioni senza il suo consenso
* [[Cross-site scripting|Cross-Site Scripting]] (XSS)
* Caricamento di file dannosi: gli aggressori possono modificare le estensioni dei file (ad esempio da ".exe" in ".jpeg" ) e lo script dannoso può essere caricato come file immagine
* Divulgazione della versione: le informazioni sulla versione possono essere utilizzate da un utente malintenzionato. Ogni volta che un browser invia una richiesta HTTP al server, in risposta otteniamo un'intestazione di risposta che contiene tutte le informazioni sul server
* [[SQL injection|SQL Injection]]: permette agli attaccanti di effettuare attività di [[IP spoofing|spoof identify]], modificare dati esistenti, causare repudiation issues come l'annullamento di transazioni o la modifica dei bilanci, permette di ottenere tutti i dati sul sistema, eliminare o rendere inaccessibile dei dati, e creare o compromettere gli utenti del database server.
* Esposizione a dati sensibili: password, numeri PAN, informazioni sulla carta di credito eccetera
* Autenticazione interrotta e gestione delle sessioni. Se l'autenticazione e la gestione delle sessioni non sono implementate correttamente in un'applicazione web, la lascerà vulnerabile agli attacchi. Gli aggressori possono rubare dati a causa di:
# Connessioni non protette (non utilizzando [[Transport Layer Security|SSL]])
# Credenziali di accesso prevedibili
# Non memorizzare le credenziali in una forma crittografata
# Logout dell'applicazione non corretto
* Reindirizzamenti e inoltri non convalidati. Se non convalidiamo i reindirizzamenti delle pagine web il rischio di un attacco aumenta. Questo attacco viene utilizzato principalmente per [[phishing]] all'utente di credenziali o per installare malware dannoso.
== Modelli di programmazione ==
ASP.NET supporta una serie di modelli di programmazione per la creazione di applicazioni Web<ref>{{Cita web|titolo=Choose between ASP.NET and ASP.NET Core|url=https://docs.microsoft.com/en-us/aspnet/core/choose-aspnet-framework?view=aspnetcore-2.1|sito=docs.microsoft.com|lingua=en}}</ref>:
* ASP.NET Web Form: un framework per la creazione di pagine modulari da componenti, con eventi dell'interfaccia utente elaborati lato server.
* ASP.NET MVC: consente di creare pagine Web utilizzando il modello di progettazione model – view – controller.
* ASP.NET Web Pages: sintassi leggera per l'aggiunta di codice dinamico e accesso ai dati direttamente all'interno del markup HTML<ref>{{Cita web|titolo=ASP.NET Web Pages (Razor) FAQ|url=https://docs.microsoft.com/en-us/aspnet/web-pages/overview/getting-started/aspnet-web-pages-razor-faq#Whats_the_difference_between_ASP.NET_Web_Pages,_ASP.NET_Web_Forms,_and_ASP.NET_MVC|sito=docs.microsoft.com|lingua=en}}</ref>.
* ASP.NET Web API: framework per la creazione di API Web su .NET Framework<ref>{{Cita web|titolo=Get Started with ASP.NET Web API 2 (C#)|url=https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api|sito=docs.microsoft.com|lingua=en}}</ref>.
* Webhook ASP.NET: implementa il modello webhook per la sottoscrizione e la pubblicazione di eventi tramite HTTP.
* SignalR - Un framework di comunicazione in tempo reale per la comunicazione bidirezionale tra client e server.
Altre estensioni ASP.NET includono:
* ASP.NET Handler: componenti che implementano l'interfaccia <code>System.Web.IHttpHandler</code>. A differenza delle pagine ASP.NET, non hanno file di markup HTML, eventi e altro supporto. Tutto quello che hanno è un file di codice (scritto in qualsiasi linguaggio compatibile con .NET) che scrive alcuni dati nella risposta HTTP del server. I gestori HTTP sono simili alle estensioni ISAPI.
* ASP.NET AJAX - Un'estensione con componenti sia lato client che lato server per la scrittura di pagine ASP.NET che incorporano funzionalità Ajax.
* ASP.NET Dynamic Data: un'estensione di [[Scaffolding (informatica)|scaffolding]] per creare applicazioni Web basate sui dati.
== Pipeline integrata IIS ==
In IIS 6.0 e versioni precedenti, le pagine scritte utilizzando versioni diverse del framework ASP non possono condividere lo stato della sessione senza l'utilizzo di librerie di terze parti. Ciò non si applica alle applicazioni ASP.NET e ASP in esecuzione fianco a fianco su IIS 7. Con IIS 7.0, i moduli possono essere eseguiti in una pipeline integrata che consente l'esecuzione di moduli scritti in qualsiasi linguaggio per qualsiasi richiesta<ref>{{Cita web|url=http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis7-integrated-pipeline|titolo=How to Take Advantage of the IIS 7.0 Integrated Pipeline|opera=iis.net}}</ref>.
== Versioni ==
{| class="wikitable sortable"
!Data
!Versione
|-
|30 novembre 2015
|4.6.1
|-
|30 aprile 2018
|4.7.2
|-
|24 aprile 2003
|1.1
|-
|21 novembre 2006
|3.0
|-
|20 luglio 2015
|4.6
|-
|19 novembre 2007
|3.5
|-
|18 novembre 2015
|5 RC1
|-
|18 aprile 2019
|4.8
|-
|17 ottobre 2017
|4.7.1
|-
|17 ottobre 2013
|4.5.1
|-
|16 gennaio 2002
|1.0
|-
|15 agosto 2012
|4.5
|-
|12 aprile 2010
|4.0
|-
|11 aprile 2017
|4.7
|-
|11 agosto 2008
|3.5 Service Pack 1
|-
|7 novembre 2005
|2.0
|-
|5 maggio 2014
|4.5.2
|-
|2 agosto 2016
|4.6.2
|}
== Confronto con PHP ==
PHP è diretto concorrente di ASP.NET. La scelta dei due linguaggi ha pro e contro a seconda delle proprie esigenze<ref>{{Cita web|url=https://www.arkasoftwares.com/blog/php-vs-asp-net/|titolo=PHP vs ASP.NET: Top Differences for Beginners’ Understanding|sito=Arka Softwares|data=13 ottobre 2023|lingua=en|accesso=7 marzo 2024}}</ref><ref>{{Cita web|url=https://www.pixelcrayons.com/blog/php-vs-asp-net-how-to-choose-the-right-one/|titolo=ASP.Net vs PHP: Which is Better?|autore=Varun Bhagat|sito=PixelCrayons|data=8 ottobre 2019|lingua=en|accesso=30 gennaio 2021}}</ref><ref>{{Cita web|url=https://theonetechnologies.com/blog/post/net-framework-vs-net-core-a-complete-quick-comparison|titolo=.NET Framework Vs .NET Core: A Complete Quick Comparison|autore=Kiranbeladiya|sito=TheOneTechnologies |data=24 settembre 2021|lingua=en|accesso=24 giugno 2022}}</ref>:
{| class="wikitable"
| colspan="2" |'''PRO'''
| colspan="2" |'''CONTRO'''
|-
|PHP
|ASP.NET
|PHP
|ASP.NET
|-
|È un open-source quindi è gratuito e viene costantemente migliorato da un gran numero di persone piuttosto che da una singola azienda
|Supporta tutti i linguaggi di programmazione e funziona bene con le app o C #
|Non è adatto a creare applicazioni desktop
|Meno facile da imparare e comprendere di PHP
|-
|Ci sono più gruppi di supporto online per aiutare ad accelerare il processo di apprendimento rispetto ad ASP.NET
|Informa gli sviluppatori se hanno commesso errori nella codifica prima della compilazione
|La gestione degli errori PHP è considerata scarsa rispetto ad ASP.NET, quindi può richiedere più tempo per scoprire un problema
|Comunità di supporto più piccola
|-
|Più facile da imparare e comprendere rispetto ad ASP.NET
|Viene fornito con molti strumenti e funzionalità per supportare i programmatori.
|Consente la personalizzazione che causa bug e codifica scadente rispetto ad ASP.NET
|Funziona solo su un server Microsoft
|-
|Funziona anche su server [[Linux]]
|Creazione applicazioni desktop.
|Essendo Open Source, il codice è alla portata di tutti ed è quindi più esposto ad attacchi
|Più costoso a causa della licenza [[Microsoft]]
|}
== Note ==
<references />
== Voci correlate ==
* [[Microsoft .NET]]
* [[Visual Basic .
* [[C sharp|C#]]
* [[Microsoft Visual Studio
* [[
== Collegamenti esterni ==
* {{Collegamenti esterni}}
*
* {{cita web|url=http://www.aspitalia.com/|titolo=ASPItalia.com: storica community su ASP e ASP.NET, dal 1998}}
* {{cita web|url=http://www.webmasterpoint.org/funzione/8/controlliserver_ASPNET/index.html|titolo=Controlli Server ASP.NET}}
* {{cita web|url=http://www.ugidotnet.org/|titolo=UGIdotNET: User Group italiano su .NET}}
* {{cita web|
* {{cita web|url=http://www.dotnetspace.com/|titolo=DotNetSpace articoli su ASP.NET 2.0|lingua=en}}
* {{
* {{cita web|url=http://www.aspdev.org/asp.net/|titolo=articoli su ASP.NET|lingua=en}}
* {{cita web|url=http://www.developerfusion.co.uk/aspnet/|titolo=Developer Fusion; tutorial e codice sorgente ASP.NET|lingua=en|accesso=3 giugno 2005|urlarchivio=https://web.archive.org/web/20060303180938/http://www.developerfusion.co.uk/aspnet/|urlmorto=sì}}
* {{cita web|sito=[[W3Schools|w3schools.com]]|url=https://www.w3schools.com/aspnet/|titolo=W3Schools tutorial|lingua=en}}
* {{cita web|url=https://www.mono-project.com/|titolo=Mono: implementazione open source del Framework .NET compatibile con molte piattaforme|lingua=en}}
* {{cita web|url=http://www.aspalliance.com|titolo=ASPAlliance: Tutorial ASP e ASP.NET|lingua=en}}
* {{cita web|
{{Framework per applicazioni web}}
|