Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los datos implementados por los servicios de datos de ADO.NET se pueden modificar utilizando una solicitud HTTP PUT. Este método puede cambiar la mayoría de los valores de las propiedades de las instancias de datos, pero no se puede cambiar la propiedad de clave de ninguna instancia de datos. La solicitud PUT se puede aplicar a los tipos de entidad, vínculos, propiedades de navegación y tipos complejos. Para obtener más información, vea Método PUT (marco de trabajo de los servicios de datos de ADO.NET).
Solicitud PUT para actualizar una propiedad única
Los datos que la solicitud PUT cambiará tienen formato de cadena que pasa a ser parte del cuerpo de la solicitud HTTP. Una solicitud PUT primero identifica la entidad Address del AdventureWorksModel con ID=2 mediante el identificador URI: "https://localhost:50781/AdvWksSalesS.svc/Address(2)". Los cambios en la propiedad AddressLine1 de la entidad Address se especifican mediante la sintaxis, "{AddressLine1:'1600 1st St.'}". Si la entidad que se va a modificar forma parte de una jerarquía de herencia, es necesario el elemento de sintaxis __metadata:
"{__metadata:{Uri:'/Address(2)/', " +
"Type:'AdventureWorksModel.Address'}, " +
"AddressLine1:'500 5th St.'}"
En el bloque de código al final de esta descripción se muestra un ejemplo completo que usa la sintaxis de JSON para representar los datos actualizados de la propiedad AddressLine1.
El código actualiza la propiedad AddressLine1 de la entidad Address de AdventureWorksModel. Se crea HttpWebRequest r con el URI de la entidad que se va a modificar, https://localhost:50781/AdvWksSalesS.svc/Address(2), como el parámetro único de su constructor. El cuerpo de la solicitud como ya se ha descrito, se asigna a una cadena denominada requestPayload. El método se establece en "PUT". ContentType se asigna al protocolo json. La línea r.Accept = "application/json" indica al servidor que envíe la respuesta, si la hay, codificada utilizando el protocolo json.
Si el servicio está protegido con un esquema de autenticación basado en transporte como la autenticación básica HTTP, se pueden pasar las credenciales asignándolas a la solicitud. Para este ejemplo, se usa DefaultCredentials.
La solicitud r tiene formato de texto Unicode. Se usa una variable UTF8Encoding a fin de obtener la longitud de la solicitud en bytes para escribir los datos digitales en el objeto Stream de la solicitud. Se asigna el objeto HttpWebResponse al llamar a GetResponse en la solicitud. El código r.GetResponse envía los datos y obtiene la respuesta. Se usa otro objeto Stream, rspStm, para contener los datos devueltos por GetResponseStream.
HttpWebRequest r =
WebRequest.Create("https://localhost:50781/AdvWksSalesS.svc/Address(2)")
as HttpWebRequest;
// __metadata is only required if inheritance is used,
// but __metadata syntax is used for completeness. Simple syntax:
//string requestPayload = "{AddressLine1:'1600 1st St.'}";
string requestPayload = "{__metadata:{Uri:'/Address(2)/', " +
"Type:'AdventureWorksModel.Address'}, " +
"AddressLine1: '1600 1st St.'}";
r.Method = "PUT";
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();
}
Vea también
Conceptos
HttpWebRequest GET (marco de trabajo de los servicios de datos de ADO.NET)
HttpWebRequest POST (marco de trabajo de los servicios de datos de ADO.NET)
HttpWebRequest DELETE (marco de trabajo de los servicios de datos de ADO.NET)
Requisitos HTTP comunes (marco de trabajo de los servicios de datos de ADO.NET)
Biblioteca cliente de .NET (marco de trabajo de los servicios de datos de ADO.NET)