C# 如何在c中使用RESTWeb服务#

C# 如何在c中使用RESTWeb服务#,c#,web-services,rest,webservice-client,webservices-client,C#,Web Services,Rest,Webservice Client,Webservices Client,我已经写了一个webservice,它在浏览器启动时运行良好。我在此Web服务中传递一个客户端id,然后返回一个字符串,其中包含客户端名称和我们传递的名称,如下所示: 我创建服务的代码是: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Activation; usin

我已经写了一个webservice,它在浏览器启动时运行良好。我在此Web服务中传递一个客户端id,然后返回一个字符串,其中包含客户端名称和我们传递的名称,如下所示:

我创建服务的代码是:

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);
        }
    }
}
但是我不能吃它。我的代码是:

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);
                }
            }
        }
    }
}

我遇到了这样一个异常:如何使用web服务。有人能帮我一下吗?

例外情况很明显——如果您想从REST服务检索数据,就不能使用POST,除非它允许。您应该使用
GET
而不是
POST
,或者干脆不更改
请求方法。默认情况下,它是
GET

您不需要做任何特殊的事情来“消费”REST服务——本质上,它们的工作方式与任何其他URL一样。HTTP
POST
动词表示要创建新资源或POST表单数据。使用GET检索资源(页面、API响应等)

这意味着您可以使用任何与HTTP相关的.NET类来调用REST服务—HttpClient(首选)、WebClient或原始HttpWebRequest

SOAP服务使用POST获取和发送数据,现在每个人(包括SOAP的创建者)都认为这是一个设计错误

编辑

为了说明这一点,使用
GET
意味着没有内容,也不需要或允许与内容相关的标题或操作。这与下载任何HTML页面相同:

var url="http://localhost:8000/DEMOService/Client/156";
var webrequest = (HttpWebRequest)System.Net.WebRequest.Create(url);

using (var response = webrequest.GetResponse()) 
using (var reader = new StreamReader(response.GetResponseStream()))
{
    var result = reader.ReadToEnd();
    Label1.Text = Convert.ToString(result);
}

您甚至可以将URL直接粘贴到浏览器以获得相同的行为

此代码示例是如何使用C#中的REST web服务的简单示例:


其他信息:无法发送此谓词类型的内容正文。第行Stream=webrequest.GetRequestStream();为什么经过一具尸体?您已经使用Id参数定义了一个操作,Id实际上是URL的一部分。将ID放入请求Url中。对
http://localhost:8000/DEMOService/Client/156
就足够了。即使URL上的
WebClient.GetString
也能正常工作谢谢你的回答。。但我在消费者法典中也做了同样的事。请参阅:System.Net.HttpWebRequest webrequest=(HttpWebRequest)System.Net.webrequest.Create(“);但仍不起作用这是代码的其余部分,就像您试图发表文章一样-您不需要指定内容类型或对请求流执行任何操作。只需调用
request.GetResponse()
立即,就像您在尝试调用任何URL
原始HttWebRequest时一样。
是一个输入错误。
[WebGet]
表示
webrequest.Method=“GET“
。c#中Rest web服务的好例子。谢谢@Mannam Brahman!这是RESTWebAPI的一个非常简单的例子。实际上,这根本不是rest使用者的例子,它是rest服务本身的一个例子,并且没有说明如何使用它。另外,这里有很多代码处理与REST主题无关的数据库。您可能需要改进您的答案,以展示如何使用它。
// http://localhost:{portno}/api/v1/youractionname?UserName=yourusername&Passowrd=yourpassword [HttpGet]

[ActionName("Youractionname")]

public Object Login(string emailid, string Passowrd)
{
    if (emailid == null || Passowrd == null)
    {
        geterror gt1 = new geterror();
        gt1.status = "0";
        gt1.msg = "All field is required";
        return gt1;
    }
    else
    {
        string StrConn = ConfigurationManager.ConnectionStrings["cn1"].ConnectionString;
        string loginid = emailid;
        string Passwrd = Passowrd;
        DataTable dtnews = new DataTable();
        SqlConnection con = new SqlConnection(StrConn);
        con.Open();
        SqlCommand cmd = new SqlCommand("sp_loginapi_app", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlParameter p1 = new SqlParameter("@emailid", loginid);
        SqlParameter p2 = new SqlParameter("@password", Passowrd);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        cmd.Parameters.Add(p1);
        cmd.Parameters.Add(p2);
        da.Fill(dtnews);
        if (dtnews.Rows[0]["id"].ToString() == "-1")
        {
            geterror gt1 = new geterror();
            gt1.status = "0";
            gt1.msg = "Invalid Username or Password";
            con.Close();
            return gt1;
        }
        else
        {
            dtmystring.Clear();
            dtmystring.Columns.Add(new DataColumn("id", typeof(int)));
            dtmystring.Columns.Add(new DataColumn("Name", typeof(string)));
            dtmystring.Columns.Add(new DataColumn("Password", typeof(string)));
            dtmystring.Columns.Add(new DataColumn("MobileNo", typeof(string)));
            dtmystring.Columns.Add(new DataColumn("Emailid", typeof(string)));
            DataRow drnew = dtmystring.NewRow();
            drnew["id"] = dtnews.Rows[0]["id"].ToString();
            drnew["Name"] = dtnews.Rows[0]["Name"].ToString();
            drnew["Password"] = dtnews.Rows[0]["Password"].ToString();
            drnew["MobileNo"] = dtnews.Rows[0]["MobileNo"].ToString();
            drnew["Emailid"] = dtnews.Rows[0]["emailid"].ToString();
            dtmystring.Rows.Add(drnew);
            gt.status = "1";
            gt.msg = dtmystring;
            con.Close();
            return gt;
        }
    }
}