0

Googleのスキルが低下しているかどうかわかりませんが、ローカルAPIをどのように消費するかわからないようです。これは最高のサンプルコードで説明することができる...Asp.Net Core APIをローカルで使用しています

だから私はシンプルなAPIを持って

public class FooApiController : Controller 
{ 
    public IActionResult GetFoo(int id) 
    { 
     if (id == 0) 
      return BadRequest(); 

     var data = ... do db access 
     return Ok(data); 
    } 
} 

とビューコントローラ

public class FooController : Controller 
{ 
    public IActionResult Foo() 
    { 
     var api = new FooApiController(); 
     var data = api.GetFoo(1); 

     ViewBag.Data = data; 
     return View(); 
    } 
} 

したがって、上記のビューコントローラで、私はAPIを呼び出します必要なデータを取得します。しかし、APIコントローラがIActionResultを返すので、ViewBad.DataはIActionResultオブジェクトになります。だから、私は上記のAPI呼び出しのStatusCodeをチェックし、必要ならばエラーを処理し、そうでなければ、結果オブジェクト全体ではなく、単にViewBagにデータを入れるように変更します。

私が見つけたすべてのサンプルでは、​​View Controllerがajax呼び出しを使用してデータを取得するビューを返すように見えます。私は理解して簡単にそれを行うことができますが、私は必要がないときにサーバーに2回往復する考えが嫌いです。

+0

私は別の往復を望んでいませんが、apiがdbコールを行い、そのサービスをビューコントローラで使用して同じdbコールを行うのに使用しないようにしてください。 – Woot

+0

@Woot私はそれがおそらくよりクリーンであることを知っています。そこで、実際のデータオブジェクトを返すサービス、結果オブジェクト(データ保持)を返すAPIコントローラ、およびビュー(データ付き)を返すビューコントローラについて説明します。より効率的な方法があるようです。 –

答えて

1

あなたは間違っています。 複数のコントローラ間でコードを再利用する場合は、GetFooメソッドからコードを移動して共有クラスに配置し、それ以外の場所からアクセスする方がよいでしょう。あなたはREST経由ビューからそれを呼び出したい場合は

は、その後、$アヤックス EXを使用してそれを呼び出す:あなたは別のC#クライアントからアクセスする場合は、HttpClientクラスを使用

$.ajax('FooApi/GetFoo/5',function(data){alert(data);}); 

、 ex:

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri("http://localhost"); 
client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
HttpResponseMessage response = await client.PostAsJsonAsync("api/FooApi/GetFoo", 3); 
response.EnsureSuccessStatusCode(); 
関連する問題