我如何使用 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 服务。需要进行两项配置更改和一些代码更改:

  1. 重新配置 WCF <bindings>。目前,您有 basicHttpBinding,正如我提到的那样,它是一个 SOAP 1.1 绑定。有大量绑定可用(here 是来自 MSDN 的列表),其中之一是 webHttpBinding.
  2. 在服务上添加 WebHttp behaviour 以便您的服务的方法可以映射到 url。
  3. 您需要添加一些信息以将 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 调用应该可以使用您最初发布的代码。