0

私は Web Api の世界に不慣れで、新しい MVC 4 Web Api には多くの可能性があると考えています。私は WCF Web サービスを生成しましたが、Web-API とその Web サービス機能を理解することを計画していました。さて、MVC 4 Web-Api Service はフロント エンドとしての役割を果たしますか? MVC 4 Web Api でオンラインでいくつかの例に従ってサンプル サービスを作成しましたが、基本的なコンソール アプリだけでサービスを使用するにはどうすればよいですか? それを消費する唯一の方法は HttpClient を使用することであることがわかりました。他の方法はありますか? 私はASP.NET WebサービスとWCF Webサービスに慣れており、参照でサービスとして参照し、そのすべてのオブジェクト、プロパティを表示して適切な呼び出しを行うことができます。

例として、web-api が post メソッドのオブジェクト「タスク」を要求している場合、どうすればオブジェクト「タスク」を埋めて web-api にポストすることができますか? WCF と同様に、WSDL のために「タスク」オブジェクトとそのプロパティを確認できるので、それらを埋めてサービスに送り返すことができます。

Web サービスは内部で使用されます。Web API サービスを使用する価値はありますか?

web-api サービスに関する私の疑問を解消していただき、ありがとうございます。

4

2 に答える 2

2

---コメントに従って編集---

このスクリーンショットは、アプローチできる可能な構造を示しています。もちろん、用途に合わせたデザインも承ります。

サンプル MVC アプリケーション

ControllerLibメイン プロジェクトにService Reference(スクリーンショットには示されていませんが、SecondMVCApplication プロジェクトの References フォルダー内にある必要があります)として取り込まれる別のクラス ライブラリ プロジェクトも同様です。2 つのコントローラー ファイル (HomeController.csLocationController.csは Controller クラスを実装したコントローラー ファイルであり、テンプレートを使用して新しい MVC4 アプリケーションを作成するときのコントローラー ファイルと同じものです)

SVCファイルがあるかどうかについての質問です。番号。MVC 4 では、アプリケーションが 1 つのプロジェクトであるか、複数のプロジェクトの組み合わせであるかに関係なく、SVC ファイルのようなものはありません (私が間違っていない限り)。内には、ルーティング URL を保持するSecondMVCApplicationと呼ばれるファイルがありRouteConfig.cs、サービス リファレンスを追加し、そこにコントローラ関数が存在する限り、. コードが実行されます。また、私が示したサンプルのスクリーンショットにもWebApiConfig.csファイルが含まれています。必要に応じて、そのファイルを使用してモバイル用の API を実行できます。そのため、レギュラーRouteConfig.csはウェブサイトのリクエストをWebApiConfig.cs処理し、API リクエストを処理します。

注:モデル プロジェクトを別のプロジェクトとして使用している場合 (これはM -VC プロジェクトであるため、使用することはわかっています...DUH !!)。接続文字列を web.config メイン プロジェクト (この場合は ) 内に配置してくださいSecondMVCApplication。この問題を解決しようとして、3 日間 (それぞれ 8 時間) もこの問題に悩まされていたことを覚えています。あなたがそれに遭遇しないことを願っています。

---編集終了---

あなたの質問に対する次の回答は、主に私の知識に基づいており、すべてのユーザーに当てはまる場合とそうでない場合があります。

  • MVC 4 Web-Api Service はフロント エンドとしての機能ですか?

これは見方次第です。通常、Web API サービスは、モバイル アプリやデスクトップ アプリなどのさまざまなプラットフォームにデータ ペイロードを提供するバックエンド サービスの作成に適しています。ただし、MVC4 インターネット アプリケーションには、フロントエンドの側面、つまりエンド ユーザーに表示されるビューが含まれます。

  • 基本的なコンソール アプリだけでサービスを利用するにはどうすればよいですか?

私の知る限り、これを行うには2つの方法があります。1 つは、API をサービス参照として使用する場合です。もう 1 つは、HTTP 操作を使用することです (これについては、HTTP クライアントに関する質問で言及し、Service Reference メソッドを使用してこの回答を予約します)。

これは、アプリケーションの実行方法によって異なります。私が言ったように、それが Web サイトの場合、MVC パターンは何もする必要はありませんが、モデル、ビュー、およびコントローラーはすべて、サービスを使用せずに連携するように設計されています。

ただし、質問へのコメントで述べたように、それが大きなアプリケーションである場合は、アプリをモジュール化して機敏にするために、それらをさまざまなプロジェクトに分割する必要があります。したがって、別のService Library. Service Library道を進む場合は、Add Referenceオプションを利用して、API/プロジェクト/Whatever-you-call-it をプロジェクトに取り込むだけです。(このために、私は通常、すべてのプロジェクトを 1 つのソリューション内に配置し、ビルド スクリプトを作成するのが面倒なので、Visual Studio にビルド順序を管理させます)。

同様に、コンソール アプリで Web サービスを使用する場合にも、同じロジックを適用できます。

  • それを消費する唯一の方法は HttpClient を使用することであることがわかりました。他の方法はありますか?

Web API を使用する 1 つの方法は、HTTP を使用することです。http リクエスト ヘッダーの書き方と http レスポンスの処理方法を知っていますか。もしそうなら、これは私が言及した2番目の方法です。URL を介して Web サービスを呼び出し、データを取得して、あらゆる作業を行います。コンソール アプリで http を使用するための答えがNOである場合は、次の投稿をご覧ください: C# コンソール アプリケーションを使用して HTTP ポスト リクエストを作成し、応答を受け取る

  • 例として、web-api が post メソッドのオブジェクト「タスク」を要求している場合、どうすればオブジェクト「タスク」を埋めて web-api にポストすることができますか?

以前の回答でこれに間接的に回答したと思います(HTTPの道を進むと仮定して)。そうでない場合は、コメントしてください。リソースが見つかるかどうかを確認します.

  • Web サービスは内部で使用されます。Web API サービスを使用する価値はありますか?

私は質問へのコメントでこれに答えました。説明が必要かどうか尋ねてください。

これがすべて役立つことを願っています。

于 2012-11-01T14:33:47.577 に答える
0

すべてのリクエストに対応する独自の Client Service クラスを作成できます。

 public class ClientService
{
    #region async helper methods

    private static string m_mediaTypeHeaderValue= "application/json";
    static HttpClient client = new HttpClient();
    static HttpClient createHttpClientInstance()
    {          
        return client ?? new HttpClient();
    }

    // SELECT

    internal static async Task<T> Get<T>(string endpoint)
    {
                client= createHttpClientInstance();
               var response = await client.GetAsync(endpoint);
            string content = await response.Content.ReadAsStringAsync();
            return await Task.Run(() => JsonConvert.DeserializeObject<T>(content));
    }
    // INSERT

    static async Task<T> Post<T>(string endpoint, object data)
    {
        client = createHttpClientInstance();
        var httpContent = new StringContent(JsonConvert.SerializeObject(data));
            httpContent.Headers.ContentType = new MediaTypeHeaderValue(m_mediaTypeHeaderValue);
            var response = await client.PostAsync(endpoint, httpContent);
            string content = await response.Content.ReadAsStringAsync();
            return await Task.Run(() => JsonConvert.DeserializeObject<T>(content));
    }

    // UPDATE

    static async Task<T> Put<T>(string endpoint, object data)
    {
        client = createHttpClientInstance();
        var httpContent = new StringContent(JsonConvert.SerializeObject(data));
            httpContent.Headers.ContentType = new MediaTypeHeaderValue(m_mediaTypeHeaderValue);

            var response = await client.PutAsync(endpoint, httpContent);
            string content = await response.Content.ReadAsStringAsync();
            return await Task.Run(() => JsonConvert.DeserializeObject<T>(content));
    }

    // DELETE

    static async Task<T> Delete<T>(string endpoint)
    {
    client = createHttpClientInstance();
    var response = await client.DeleteAsync(endpoint);
            string content = await response.Content.ReadAsStringAsync();
            return await Task.Run(() => JsonConvert.DeserializeObject<T>(content));
    }

    #endregion
}
于 2017-11-29T18:01:56.260 に答える