Posted on Lascia un commento

Accedere ad un sito su IISExpress da un altro device

Potreste avere la necessità di accedere al vostro sito in sviluppo con Visual Studio da un altro device: per esempio se volete testare se il sito è realmente responsive.Bisogna fare solo alcune modifiche.

Quando aprite il vostro sito da visual studio viene visualizzato l’indirizzo

http://localhost:port_number

, dove port_number è il numero di porta assegnato al progetto da Visual studio /IISExpress.

Nella vostra directory di progetto trovate la directory .vs. Aprite il file

your_project_folder\.vs\config\applicationhost.config

Qui trovate il tag bindings. Nell’esempio vedete uno specifico numero di porta ma voi avrete il vostro.

<bindings>
 <binding protocol="http" bindingInformation="*:60132:localhost" />
</bindings>

Aggiungete una riga con l’ip del vostro computer. Potete aggiungerne quante ne volete.

<bindings>
 <binding protocol="http" bindingInformation="*:60132:localhost" />
<binding protocol="http" bindingInformation="*:60132:192.168.1.142" />
 </bindings>

Aprite un prompt di dos con privilegi di Amministratore e digitate il comando :

netsh http add urlacl url=http://192.168.1.142:60132/ user=everyone

A questo punto dovete creare una regola sul firewall per la vostra porta.Sempre dal prompt di dos lanciate il comando :

netsh advfirewall firewall add rule name="IISExpress_website1" dir=in protocol=tcp localport=60132 profile=private remoteip=localsubnet action=allow

Ora potete raggiungere il sito web di IISExpress da qualsiasi device in rete utilizzando

http://192.168.1.142:60132/

 

Posted on Lascia un commento

ASP.NET MVC: PUBBLICAZIONE DI UN SITO

Visual Studio ci consente di pubblicare il nostro sito web su un web server interno (intranet) o su un web server esterno, per esempio ospitato su Azure.

Nel caso di un server in lan, su un web server avete creato tramite IIS un sito che risiede su una certa directory per adesso vuota. Altrimenti avete già pronto un sito esterno.

In Visual Studio, nel pannello a destra chiamato “Solution Explorer” facciamo click con il tasto destro del mouse sul nostro progetto e selezioniamo l’opzione “Publish“. Si apre la finestra “Publish” che riporta a sinistra i 4 step da fare per la pubblicazione.

Profile

Andate sul menu a tendina in alto al centro  e scegliete “New Custom Profile”. Inventatevi il nome di questo profilo. Una volta inserito, passerete direttamente allo step successivo.

Connection con il metodo “Web Deploy”

Publish Metod : scegliere Web Deploy sia che si pubblichi il sito in un server in lan, sia in un server esterno.

Server (web server in lan) : http://myserver

Server (esterno, per esempio Azure): mysite.azurewebsites.net:443

Site name (web server in lan) : nome della directory in cui deve risiedere il sito

Site name (esterno, per esempio Azure) : nome che avete dato al sito (mysite)

User Name e Password (web server in lan) : mettere uno username amministratore della macchina server. Se la macchina è in dominio usare un Amministratore locale.

User Name e Password (esterno) : ftp user

Destination Url : indirizzo del sito web. es : http://……………..

Settings

In questa tab il programma legge dal we.config le stringhe di connessione al database. Se nel vostro sito di destinazione il database è diverso, dovete specificare la giusta connessione. La pubblicazione sostituira le stringhe di destinazione alle stringhe di origine. Vedremo in seguito che esiste un metodo per inserire nel web.config ulteriori variazioni rispetto al web.config di origine.

Preview

Qui potete vedere i file che saranno inviati alla destinazione cioè i nuovi o  i modificati dopo l’ultimo invio. E potete pubblicare!


Configurazione del web.config

Il nostro sito web di destinazione può avere altre caratteristiche particolari, specificate nel web.config, diverse dal sito di partenza, oltre alle stringhe di connessione al database.
Ci possiamo creare un web.config specifico per ogni deploy.

Andate sul progetto. Nelle “Proprietà”, trovate la directory “PublishProfiles” che contiene i dati salvati precedentemente. Trovate un file .pubxml per ognuno dei deploy che avete creato. Andate su file che vi interessa, spingete il tasto destro del mouse e selezionate “Add Config Transform”.

Se andate nel web.config vedrete che esiste un file aggiuntivo che si chiama come il vostro deploy.  Vediamo alcuni esempi di quello che potete fare con tag che inserirete all’interno di <configuration>

<connectionStrings>
 <add name="MyDB"
 connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
 xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
 </connectionStrings>

Questa stringa sostituisce (xdt:Transform=”SetAttributes”) gli attributi del tag che si chiama (xdt:Locator=”Match(name)) “MyDB” con quelli che trova qui.

<appSettings><add key="myemail" value="info@contoso.com" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/></appSettings>

Questa stringa sostituisce gli attributi (xdt:Transform=”SetAttributes”) del tag che ha come key (xdt:Locator=”Match(key)) “myemai” con quelli che trova qui.

<system.net>
 <mailSettings xdt:Transform="Replace">
 <smtp deliveryMethod="Network" ........................
 </smtp>
 </mailSettings>
 </system.net>

Questa stringa trasforma (xdt:Transform=”Replace”) tutto il tag mailSettings ed il suo contenuto.

Posted on Lascia un commento

ASP.NET MVC EMAIL DA SITO E PASSWORD DIMENTICATA

Il nostro sito ha necessità di inviare email ai suoi utenti, per esempio quando l’utente si dimentica la password di accesso. Per fare questo ci viene in soccorso la classe System.Net.Mail.SmtpClient.

Questa classe usa in automatico le impostazioni del smtp server memorizzate nel file Web.config. E’ sufficiente aggiungere a questo file i seguenti tag all’interno del configuration :

<system.net>
 <mailSettings>
 <smtp deliveryMethod="Network" from="mail_from">
 <network host="my_smtp_server" port="my_smtp_server_port" userName="user_name_smtp" password="password" clientDomain="my_domain" />
 </smtp>
 </mailSettings>
 </system.net>

PASSWORD DIMENTICATA

Nella view Account/Login , vedete in basso a sinistra il link a Account/ForgotPassword che è la pagina che permette all’utente il reset della password

Andate nel controller Account, nell’action post chiamata “ForgotPassword” e rendete operative, rimuovendole come commento, le linee di codice dedicate al recupero password.

Andate nel file IdentityConfig.cs, nella funzione

public Task SendAsync(IdentityMessage message)

e sostituite alla riga

return Task.FromResult(0);

le seguenti righe di codice

var sentFrom = "myemail@mydomain.com"
 //
 System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
 //
 client.EnableSsl = false;

// Create the message:
 var mail =
 new System.Net.Mail.MailMessage(sentFrom, message.Destination);

mail.Subject = message.Subject;
 mail.Body = message.Body;
 mail.IsBodyHtml = true;

// Send:
 return client.SendMailAsync(mail);

Avete attivato il recupero password

Posted on Lascia un commento

ASP.NET MVC LINQ MIGLIORATO

Linq è un elemento introdotto nel Framework 3.5. Attraverso di esso è possibile fare interrogazioni su liste, collezioni, tabella di database, file xml usando una notazione molto simile al linguaggio SQL.

Ritorniamo per esempio alla nostro modello Student.

[Table("STUDENTS")]
 public class Student
 {
 public int ID { get; set; }
 public string NAME { get; set; }
 public string SURNAME { get; set; }
 public int AGE {get;set;}
 }

Nel nostro context abbiamo l’istanza alla tabella

public DbSet<Student> Students { get; set; }

Attraverso Linq, possiamo chiedere :

var list = context.Studens.Where(s => s.NAME.StartsWith("M") and s.AGE > 18).OrderBy(s => s.SURNAME)

Il linguaggio Linq è lo strumento con cui il context, base dell’ASP.NET MVC, interroga il nostro database. Però Linq, a nostro avviso, proprio quando si lavora con le tabelle di un database ha dei limiti rispetto a SQL. Come vedete, la query sopra è preimpostata : cioè esiste un filtro sulla proprietà NAME e uno sulla AGE e un ordinamento sulla proprietà SURNAME. Questa base di dati sarà sempre ordinata così e al massimo potremo variare la query agendo sulla stringa “M”  e sul numero 18.

Le nostre query però sono variabili in genere. Immaginate di avere una griglia con colonne riordinabili. Usando linq dovreste gestire una query diversa per ognuna delle proprietà che possono essere ordinate ed inoltre dovreste gestire il verso. E se voleste mettere dei filtri ? Dovreste creare delle query in sequenza che, piano piano, filtrano i dati : una per la prima proprietà, uno per la seconda, etc.

Un pò scomodo.

A questo proposito ci viene in soccorso la libreria System.Linq.Dynamic https://github.com/kahanu/System.Linq.Dynamic

che ci permette di fare domande come :

var list = context.Studens.Where("NAME = \"JOHN\" and AGE >= 18 and  AGE <= 34").OrderBy(SURNAME asc, NAME)

Addio Linq , Grazie SQL.