Comment consommer le Repos de service Web en c#
J'ai écrit un webservice qui sur navigateur lancement fonctionne très bien. Je passe un id client dans ce webservice, puis renvoie une chaîne de caractères contenant le nom du client et ce qui nous est passé comme ceci: http://prntscr.com/8c1g9z
Mon code pour la création de service:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
namespace RESTService.Lib
{
[ServiceContract(Name = "RESTDemoServices")]
public interface IRESTDemoServices
{
[OperationContract]
[WebGet(UriTemplate = "/Client/{id}", BodyStyle = WebMessageBodyStyle.Bare)]
string GetClientNameById(string Id);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestDemoServices:IRESTDemoServices
{
public string GetClientNameById(string Id)
{
return ("Le nom de client est Jack et id est : " +Id);
}
}
}
Mais je ne suis pas en mesure de le consommer. Mon code est:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Http;
using System.Net;
using System.IO;
namespace ConsumerClient
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.Net.HttpWebRequest webrequest = (HttpWebRequest)System.Net.WebRequest.Create("http://localhost:8000/DEMOService/Client/156");
webrequest.Method = "POST";
webrequest.ContentType = "application/json";
webrequest.ContentLength = 0;
Stream stream = webrequest.GetRequestStream();
stream.Close();
string result;
using (WebResponse response = webrequest.GetResponse()) //It gives exception at this line liek this http://prntscr.com/8c1gye
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
result = reader.ReadToEnd();
Label1.Text = Convert.ToString(result);
}
}
}
}
}
J'obtiens une exception comme cette http://prntscr.com/8c1gye Comment utiliser le web service. Quelqu'un pourrait-il m'aider ?
[WebGet]
signifie webrequest.Method = "GET"
.
OriginalL'auteur xav xav | 2015-09-03
Vous devez vous connecter pour publier un commentaire.
L'exception est assez clair que vous ne pouvez pas utiliser la POSTE si vous voulez récupérer de données à partir d'un service REST, à moins que celle-ci le permet. Vous devez utiliser
GET
au lieu dePOST
, ou tout simplement ne pas changerrequest.Method
. Par défaut, ilGET
.Vous n'avez pas besoin de faire quelque chose de spécial à "consommer" des services REST - essentiellement, ils fonctionnent comme n'importe quelle autre URL. Le HTTP
POST
verbe signifie que vous voulez vous créer une nouvelle ressource, ou de valider les données du formulaire. Pour récupérer une ressource (page, API, etc) que vous utilisez pour OBTENIR.Cela signifie que vous pouvez utiliser n'importe quel de le HTTP .NET classes d'appeler un service REST - HttpClient (de préférence), WebClient ou raw HttpWebRequest.
SAVON services utilisés POST à la fois pour obtenir et l'envoi de données, qui est maintenant considérée comme une erreur de conception par tout le monde (y compris les créateurs de SAVON).
MODIFIER
Que ce soit clair, à l'aide d'un
GET
signifie qu'il n'ya pas de contenu et pas liées au contenu des en-têtes ou les opérations sont nécessaires ou autorisés. C'est le même que le téléchargement de toute page HTML:Vous pouvez même coller directement l'URL d'un navigateur à avoir le même comportement
Pourquoi passer d'un corps? Vous avez défini une action avec un paramètre Id, avec l'Id en fait aussi partie de l'URL. Mettre l'ID dans l'Url de la requête. Une simple demande pour
http://localhost:8000/DEMOService/Client/156
est assez. Même unWebClient.GetString
sur l'URL de travailmerci pour la réponse.. Mais j'ai doen la même dans le code de la consommation . voir : Système.Net.HttpWebRequest webrequest = (HttpWebRequest)du Système.Net.WebRequest.Créer("localhost:8000/DEMOService/Client/156">); Mais encore ne pas travailler
C'est le rest du code qui agit comme si vous essayez de faire un POST - vous ne pas besoin de spécifier un type de contenu ou de faire n'importe quoi avec la demande de flux. Appelez simplement
request.GetResponse()
immédiatement, comme vous le feriez lorsque vous essayez d'appeler aucun URLraw HttWebRequest.
est une faute de frappe.OriginalL'auteur Panagiotis Kanavos
De cette api est le parfait exemple de la façon de Consommer des Services Web Rest en c#
//http://localhost:{portno}/api/v1/youractionname?UserName=nom d'utilisateur&Passowrd=votre mot de passe [HttpGet]
Merci @Mannam Brahmam!
il est très simple de web rest api.
OriginalL'auteur Manish sharma