我如何使用 rest sharp 来调用此方法
How can I use rest sharp to call this method
我休息api定义为FruitFactory.svc,
<%@ ServiceHost Debug="true" Language="C#"
Service="LocalFarm.WebServices.Internal.FruitFactory,
LocalFarm.WebServices.Internal, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=23j26b5f532c68dj" %>
网络配置是,
<bindings>
<basicHttpBinding>
<binding name="Localfarm_BasicHttpBinding" maxReceivedMessageSize="104857600">
<security mode="Transport">
<transport clientCredentialType="InheritedFromHost" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="myBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
地址是,
https://portal.localFarm.com/2240AM/136/_vti_bin/internal/fruitfactory.svc
如何使用 rest sharp api 对其进行 rest 调用?
[DataContract]
public class FileObject
{
[DataMember]
public string orderName;
[DataMember]
public byte[] data;
}
[ServiceContract]
public interface IFruitFactory
{
[OperationContract]
FileObject[] GetInvoices(string customerID, string invoiceFolder, string customerName, string[] orderNames);
}
到目前为止已经试过了,
var client = new RestClient("https://portal.localFarm.com/2240AM/136/_vti_bin/internal/fruitfactory.svc");
client.Authenticator = new HttpBasicAuthenticator("username", "password");
var request = new RestRequest(Method.GET);
不知道下一步该做什么...
您已经创建了一个 WCF 服务,但这(不一定)与 REST 服务相同。使用您当前的配置,您的服务是一个 SOAP 服务,您应该使用特殊的 XML 格式向其发送消息。与之通信的最简单方法是生成服务代理,方法是右键单击项目中的 "References" 条目,然后单击 "Add service reference"。这将创建一个服务客户端,您可以使用它来调用服务上的方法。客户端处理转换为使用的 XML 格式等。
但是,如果您愿意,可以将您的服务设为 REST/web 服务。需要进行两项配置更改和一些代码更改:
- 重新配置 WCF
<bindings>
。目前,您有 basicHttpBinding
,正如我提到的那样,它是一个 SOAP 1.1 绑定。有大量绑定可用(here 是来自 MSDN 的列表),其中之一是 webHttpBinding
.
- 在服务上添加
WebHttp
behaviour 以便您的服务的方法可以映射到 url。
- 您需要添加一些信息以将
OperationContract
映射到 Url。这是通过 WebInvoke
属性完成的。
由于我没有您的完整 web.config
或应用程序代码,我将尝试说明这些更改,但您可能需要进行一些额外的更改。
web.config
:
<behaviors>
<serviceBehaviors>
<behavior name="myBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors> <!-- Added webHttp behavior -->
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="LocalFarm.WebServices.Internal.FruitFactory"> <!-- Needs to match the Service name in the .svc file -->
<endpoint address="" contract="LocalFarm.WebServices.Internal.IFruitFactory"
binding="webHttpBinding" bindingConfiguration="Localfarm_WebHttpBinding"
behaviorConfiguration="webBehavior" />
</service>
</services>
然后在你的代码中:
[ServiceContract]
public interface IFruitFactory
{
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetInvoices")]
FileObject[] GetInvoices(string customerID, string invoiceFolder, string customerName, string[] orderNames);
}
这应该允许您向 https://portal.localFarm.com/2240AM/136/_vti_bin/internal/fruitfactory.svc/GetInvoices?customerID=123&invoiceFolder=foo...etc...
发出 GET 请求。不过,在这种情况下,您可能希望切换到 POST 以便更轻松地处理数组。
希望这对您有所帮助,使用 RestSharp 调用应该可以使用您最初发布的代码。
我休息api定义为FruitFactory.svc,
<%@ ServiceHost Debug="true" Language="C#"
Service="LocalFarm.WebServices.Internal.FruitFactory,
LocalFarm.WebServices.Internal, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=23j26b5f532c68dj" %>
网络配置是,
<bindings>
<basicHttpBinding>
<binding name="Localfarm_BasicHttpBinding" maxReceivedMessageSize="104857600">
<security mode="Transport">
<transport clientCredentialType="InheritedFromHost" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="myBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
地址是,
https://portal.localFarm.com/2240AM/136/_vti_bin/internal/fruitfactory.svc
如何使用 rest sharp api 对其进行 rest 调用?
[DataContract]
public class FileObject
{
[DataMember]
public string orderName;
[DataMember]
public byte[] data;
}
[ServiceContract]
public interface IFruitFactory
{
[OperationContract]
FileObject[] GetInvoices(string customerID, string invoiceFolder, string customerName, string[] orderNames);
}
到目前为止已经试过了,
var client = new RestClient("https://portal.localFarm.com/2240AM/136/_vti_bin/internal/fruitfactory.svc");
client.Authenticator = new HttpBasicAuthenticator("username", "password");
var request = new RestRequest(Method.GET);
不知道下一步该做什么...
您已经创建了一个 WCF 服务,但这(不一定)与 REST 服务相同。使用您当前的配置,您的服务是一个 SOAP 服务,您应该使用特殊的 XML 格式向其发送消息。与之通信的最简单方法是生成服务代理,方法是右键单击项目中的 "References" 条目,然后单击 "Add service reference"。这将创建一个服务客户端,您可以使用它来调用服务上的方法。客户端处理转换为使用的 XML 格式等。
但是,如果您愿意,可以将您的服务设为 REST/web 服务。需要进行两项配置更改和一些代码更改:
- 重新配置 WCF
<bindings>
。目前,您有basicHttpBinding
,正如我提到的那样,它是一个 SOAP 1.1 绑定。有大量绑定可用(here 是来自 MSDN 的列表),其中之一是webHttpBinding
. - 在服务上添加
WebHttp
behaviour 以便您的服务的方法可以映射到 url。 - 您需要添加一些信息以将
OperationContract
映射到 Url。这是通过WebInvoke
属性完成的。
由于我没有您的完整 web.config
或应用程序代码,我将尝试说明这些更改,但您可能需要进行一些额外的更改。
web.config
:
<behaviors>
<serviceBehaviors>
<behavior name="myBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors> <!-- Added webHttp behavior -->
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="LocalFarm.WebServices.Internal.FruitFactory"> <!-- Needs to match the Service name in the .svc file -->
<endpoint address="" contract="LocalFarm.WebServices.Internal.IFruitFactory"
binding="webHttpBinding" bindingConfiguration="Localfarm_WebHttpBinding"
behaviorConfiguration="webBehavior" />
</service>
</services>
然后在你的代码中:
[ServiceContract]
public interface IFruitFactory
{
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetInvoices")]
FileObject[] GetInvoices(string customerID, string invoiceFolder, string customerName, string[] orderNames);
}
这应该允许您向 https://portal.localFarm.com/2240AM/136/_vti_bin/internal/fruitfactory.svc/GetInvoices?customerID=123&invoiceFolder=foo...etc...
发出 GET 请求。不过,在这种情况下,您可能希望切换到 POST 以便更轻松地处理数组。
希望这对您有所帮助,使用 RestSharp 调用应该可以使用您最初发布的代码。