Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile aggiungere nuovi dati ad ADO.NET Data Services utilizzando una richiesta POST HTTP. La richiesta POST può essere applicata a set di entità identificati da una chiave, valori di proprietà, proprietà di navigazione e operazioni del servizio. Per ulteriori informazioni, vedere Metodo POST (framework di ADO.NET Data Services).
Richiesta POST per l'inserimento di una nuova entità
I dati inseriti dalla richiesta POST vengono formattati come stringa che entra a far parte del corpo della richiesta HTTP. Una richiesta POST innanzitutto identifica l'entità Address impostata in AdventureWorksModel tramite l'URI: "https://localhost:50781/AdvWksSalesS.svc/Address". Se l'entità da modificare fa parte di una gerarchia di ereditarietà, è richiesto l'elemento di sintassi __metadata:
"{__metadata:{Uri:'/Address/', " +
"Type:'AdventureWorksModel.Address'}}"
Nel blocco di codice alla fine di questa descrizione viene visualizzato un esempio completo che utilizza la sintassi JSON per rappresentare un nuovo elemento di dati per il set di entità Address.
Il codice inserisce una nuova entità Address nel servizio dati che distribuisce AdventureWorksModel. Come unico parametro del costruttore viene creata una richiesta HttpWebRequest r con l'URI del tipo di entità da inserire: https://localhost:50781/AdvWksSalesS.svc/Address. Per l'inizializzazione di numerose variabili costituenti i dati delle proprietà del nuovo elemento, è necessario eseguire la serializzazione nei formati JSON. La serializzazione DateTime è una conversione complessa che sarebbe gestita più adeguatamente da una libreria di codici JSON, ma in questo caso è inclusa. Per ulteriori informazioni sulla serializzazione JSON, vedere Regole di serializzazione JSON (framework di ADO.NET Data Services). Il numero intero assegnato a stateProvinceId e il valore Guid assegnato a rowGuid vengono serializzati nell'inizializzazione della stringa requestPayload.
Come descritto in precedenza, il corpo della richiesta viene assegnato a una stringa denominata requestPayload. Il metodo viene impostato su "POST". ContentType viene assegnato al protocollo json. La riga r.Accept = "application/json" indica al server di restituire l'eventuale risposta codificata utilizzando il protocollo json.
Se il servizio viene protetto con uno schema di autenticazione basato sul trasporto, quale l'autenticazione di base HTTP, le credenziali possono essere passate come credenziali assegnate alla richiesta. Per questo esempio, vengono utilizzate le credenziali DefaultCredentials.
La richiesta r viene formattata come testo Unicode. Per ottenere la lunghezza della richiesta in byte e scrivere dati digitali nell'oggetto Stream della richiesta viene utilizzata una variabile UTF8Encoding. L'oggetto HttpWebResponse viene assegnato chiamando GetResponse sulla richiesta. Il codice r.GetResponse invia i dati e ottiene la risposta. Per contenere i dati restituiti da GetResponseStream viene utilizzato un altro oggetto Stream, rspStm.
HttpWebRequest r =
WebRequest.Create("https://localhost:50781/AdvWksSalesS.svc/Address")
as HttpWebRequest;
DateTime creationDate = DateTime.Now;
// Convert the date to JSON format.
long ticks = (creationDate.ToUniversalTime().Ticks -
(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks) / 10000;
Int32 stateProvinceId = 79;
Guid rowGuid = Guid.NewGuid();
// __metadata is only required if inheritance is used.
string requestPayload = "{__metadata:{Uri:'/Address/', " +
"Type:'AdventureWorksModel.Address'}, " +
"AddressLine1:'703 NW 170th St.', " +
"City:'Kirkland', StateProvinceID:" +
stateProvinceId.ToString() +
", PostalCode:'98021', rowguid:'" +
rowGuid.ToString() +
"', ModifiedDate:'\\/Date(" + ticks + ")\\/'}";
r.Method = "POST";
UTF8Encoding encoding = new UTF8Encoding();
r.ContentLength = encoding.GetByteCount(requestPayload);
r.Credentials = CredentialCache.DefaultCredentials;
r.Accept = "application/json";
r.ContentType = "application/json";
//Write the payload to the request body.
using ( Stream requestStream = r.GetRequestStream())
{
requestStream.Write(encoding.GetBytes(requestPayload), 0,
encoding.GetByteCount(requestPayload));
}
try
{
HttpWebResponse response = r.GetResponse() as HttpWebResponse;
string responseBody = "";
using (Stream rspStm = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(rspStm))
{
textBoxResponse.Text = textBoxResponse.Text +
"Response Description: " + response.StatusDescription;
textBoxResponse.Text = textBoxResponse.Text +
"Response Status Code: " + response.StatusCode;
textBoxResponse.Text = textBoxResponse.Text + "\r\n\r\n";
responseBody = reader.ReadToEnd();
}
}
textBoxResponse.Text = "Success: " + response.StatusCode.ToString();
}
catch (System.Net.WebException ex)
{
textBoxResponse.Text = textBoxResponse.Text +
"Exception message: " + ex.Message;
textBoxResponse.Text = textBoxResponse.Text +
"\r\nResponse Status Code: " + ex.Status;
textBoxResponse.Text = textBoxResponse.Text + "\r\n\r\n";
// get error details sent from the server
StreamReader reader = new StreamReader(ex.Response.GetResponseStream());
textBoxResponse.Text = textBoxResponse.Text + reader.ReadToEnd();
}
Vedere anche
Concetti
Metodo POST (framework di ADO.NET Data Services)
HttpWebRequest PUT (framework di ADO.NET Data Services)
HttpWebRequest GET (framework di ADO.NET Data Services)
HttpWebRequest POST (framework di ADO.NET Data Services)
HttpWebRequest DELETE (framework di ADO.NET Data Services)
Requisiti HTTP comuni (framework di ADO.NET Data Services)
.Libreria client NET (framework di ADO.NET Data Services)