2

いくつかの CRUD メソッドを持つ Asp.net Web API プロジェクトがあります。

これらのメソッドに加えて、Authorizationヘッダーを読み取り、ユーザーがリソースにアクセスできないようにする承認サービスを追加したいと考えています (承認されていない場合)。

// Method on internal IP Project
public class InternalController : ApiController
{
    public void Create(CreateRequest request)
    {
        // implement the method
    }
}

// Method on public IP Project
public class ExternalController : ApiController
{
    public async Task Create(CreateRequest request)
    {
        // validate Authorization header and throw exception if not valid

        using (HttpClient client = new HttpClient())
        {
            string parameters = string.Format("param1={0}&param2={1}", request.Param1, request.Param2);

            client.BaseAddress = new Uri("http://192.168.1.1/");
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await client.GetAsync("api/internal/create?" + parameters);
            response.EnsureSuccessStatusCode();
        }
    }
}

外部 API から内部 API へのリクエストをより簡単に「リダイレクト」する方法はありますか?

現在、ExternalAPI で受け取ったすべてのパラメーターを手動で再作成し、InternalAPI で送信する必要があります。それらが同じであってもです。

ExternalAPI メソッドにあるオブジェクトをHttpClient自動的に送信することはできますか?HttpRequestMessage (Request)

4

2 に答える 2

4

ASP.NET Web API について話すとき。HttpClient は自動的にリダイレクトしません。内部サービスからの応答になったら、外部に渡すことができます。または、ここのようにアクションをリダイレクトできます

REST の観点からクライアントの正しいリダイレクトを行うには、HTTP リダイレクト ヘッダーと応答コードを使用します。たとえば、HTTP 応答コード 302。そして、クライアントはそのような応答コードに反応し、Location ヘッダーからリダイレクト アドレスを取得できる必要があります。しかし、それはクライアントのリダイレクトに関するものです。

アーキテクチャからの API からのいくつかの内部サービスの呼び出しについて話すとき。次の代替手段があります。

  1. 内部サービスをクラス メソッドとして呼び出す
  2. サービスからサービスへの呼び出しを行う
  3. メッセージ キューまたはバスをセットアップすると、API はサービス バスを介して通信します。

内部サービスをクラス メソッドとして呼び出すのは 非常に簡単です。サービスコールの影響や遅延はありません。ただし、アセンブリを参照する必要があり、常に可能であるとは限りません。または、そのような方法は要件のために不可能である可能性があります

サービスからサービスへの呼び出し を行う 欠点があります。サービスが密結合されているため、遅延が発生し、内部サービスからの応答を待つ必要があります。それは悪い習慣と見なされます。しかし、サービスバスへの最初のステップとして、一時的な解決策になる可能性があります。

メッセージ キューまたはバスをセットアップすると、API はサービス バスを介して通信します。 サービスは分離され、独立しています。返事を待ってはいけません。ただし、アーキテクチャとインフラストラクチャをセットアップしてより複雑にすることは技術的に困難です/

要約 すると、あなたのアーキテクチャーに最適な方法はありません。要件に基づいて代替手段を選択する必要があります。

于 2013-04-30T09:22:23.880 に答える