2016-09-24 21 views
0

处理每个控制器的web api端点的首选方式是什么?例如,我的MVC控制器将调用不同的端点。 这些是目前唯一的,但它可以改变。从mvc控制器调用远程web api

此外,我将在本地进行开发并部署到开发服务器。

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"); 
    } 
} 
+0

一个老式的方法是使用WCF http://stackoverflow.com/questions/13200381/asp-net-mvc-4-application-calling-远程的WebAPI/13207679#13207679 – peco

回答

0

不知道我理解你的问题或问题,但我会为服务创建一个包装类,然后对每一个你需要调用的资源不同的方法。总是认为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; 
     } 
    } 
} 
相关问题