簡體   English   中英

從MVC控制器調用遠程Web API

[英]Calling remote web api from mvc controller

處理每個控制器的Web api端點的首選方法是什么? 例如,我的MVC控制器將調用不同的端點。 這些是目前唯一的,但是可能會改變。

另外,我將在本地進行開發並將其部署到開發服務器。

http:// localhost:42769 / api / categories / 1 / products

http:// localhost:42769 / api / products /

public class ProductsController : Controller
{
    HttpClient client;
    string url = "http://localhost:42769/api/categories/1/products"; //api/categories/{categoryId}/products

    public ProductsController()
    {
        client = new HttpClient();
        client.BaseAddress = new Uri(url);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    }


    // GET: Products
    public async Task<ActionResult> ProductsByCategory()
    {
        HttpResponseMessage responseMessage = await client.GetAsync(url);
        if (responseMessage.IsSuccessStatusCode)
        {
            var responseData = responseMessage.Content.ReadAsStringAsync().Result;
            var products = JsonConvert.DeserializeObject<List<GetProductsByCategoryID>>(responseData);
            return PartialView(products);
        }

        return View("Error");
    }
}

不確定我是否理解您的問題,但是我會為服務創建包裝類,然后為需要調用的每種資源使用不同的方法。 始終認為SOLID

示例 (手寫)

public class Client
{
    private Uri baseAddress;

    public Client(Uri baseAddress)
    {
        this.baseAddress = baseAddress;
    }

    public IEnumerable<Products> GetProductsFromCategory(int categoryId)
    {
         return Get<IEnumerable<Product>>($"api/categories/{categoryId}/products");
    }

    public IEnumerable<Products> GetAllProducts()
    {
         return Get<IEnumerable<Product>>($"api/products");
    }

    private T Get<T>(string query)
    {
        using(var httpClient = new HttpClient())
        {
             httpClient.BaseAddress = baseAddress;

             var response= httpClient.Get(query).Result;
             return response.Content.ReadAsAsync<T>().Result;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM