2

C#で以下のエンドポイントにgetリクエストをしたいです。

http://api.example.com/1/companies/ {id}

私は WCF レスト スターター キットを見ていましたが、レスト スターター キットをインストールする以外に get リクエストを簡単に行う方法が他にあるのではないかと思いました。

提案してください。ありがとう、

4

2 に答える 2

3

URL から GET を実行して文字列を返すメソッドを次に示します。

public static string GetResponse(string endPoint)
        {
            HttpWebRequest request = CreateWebRequest(endPoint);

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                var responseValue = string.Empty;

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode);
                    throw new ApplicationException(message);
                }

                // grab the response  
                using (var responseStream = response.GetResponseStream())
                {
                    using (var reader = new StreamReader(responseStream))
                    {
                        responseValue = reader.ReadToEnd();
                    }
                }

                return responseValue;
            }
        }

編集:

private static HttpWebRequest CreateWebRequest(string endPoint)
        {
            var request = (HttpWebRequest)WebRequest.Create(endPoint);

            request.Method = "GET";
            request.ContentLength = 0;
            request.ContentType = "text/json";

            return request;
        }  
于 2012-06-18T13:54:49.047 に答える
1

新しいクラス ライブラリ プロジェクトを作成し、「RESTService.Lib」という名前を付けます。「System.ServiceModel」と「System.ServiceModel.Web」への参照を追加します。IRESTDemoServices というインターフェイス クラスを作成し、提供されるサービスを表すメソッドの定義を追加します。私たちのインターフェースは、次のようなサービスを 1 つだけ提供します。

public interface IRESTDemoServices
{
    string GetClientNameById(string Id);
}

このインターフェースをサービスとして扱うようにフレームワークに指示するには、次のように装飾する必要があります。

[ServiceContract(Name = "RESTDemoServices")]
public interface IRESTDemoServices
{
    [OperationContract]
    string GetClientNameById(int Id);
}

サービスへのアクセスに使用する URL を定義します (URL ルーティング)。

public static class Routing
{
    public const string GetClientRoute = "/Client/{id}";
}

インターフェース内のメソッドへの URL ルートの接続は、次のようにインターフェースを属性で装飾することによって実現されます。

[ServiceContract(Name = "RESTDemoServices")]
public interface IRESTDemoServices
{
    [OperationContract]
    [WebGet(UriTemplate = Routing.GetClientRoute, 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)
    {
        Random r = new Random();
        string ReturnString="";
        int Idnum=Convert.ToInt32(id);
        for (int i = 0; i < Idnum; i++)
            ReturnString += char.ConvertFromUtf32(r.Next(65, 85));

        return ReturnString;

    }
}

そして、IIS でホストするか、カスタム ホスティング (コンソール、Windows サービスなど) を使用してホストする必要があります。

こちらをご覧ください: http://www.progware.org/blog/post/a-simple-rest-service-in-c.aspx

それが役立つことを願っています!

于 2012-06-18T13:49:13.890 に答える