2014-07-10 23 views
7

ASP.NET Web API'sı ve ASP.NET Web Sitesi geliştiriyorum. Web sitesi, Web Api'yi kullanacak ve bir mobil uygulama da Web Api'yi REST yoluyla kullanacak.Web Api projemi çözümümdeki diğer projelerden nasıl kullanabilirim?

Bu ikisini de ayrı ayrı geliştirmek iyi gidiyor, ancak şimdi Web stüdyosunu Web sitesinden test etmeye başlamak istediğim aşamada, ideal olarak hepsi görsel stüdyonun içinden. Örneğin, formumun bulunduğu bir sayfam var, tamamlandığında veritabanına bir kullanıcı eklemek için Web Api'mi çağırırdım. Bunu test için çevrim içi olarak yüklemek doğal olarak sorunun dışındadır.

Burada en iyi uygulama nedir? Web Api'yi Web Sitesi projesinden (Aspx) referans alabilir veya bununla ilgili başka bir yol var mı?

+0

tüketmek için aşağıdaki kodu kullanın Web API projesi çalışıyor, bunun için Visual Studio'da MULTIPLE projesini aynı anda çalıştırmanız gerekiyor. –

cevap

1

Ne test etmek istediğinize bağlıdır. Denetleyici uygulamalarınızı basitçe test etmek isterseniz, bir test projesi oluşturabilir ve projeye referans verebilir, kontrol cihazlarınızı manuel olarak başlatabilir ve testlerinizde bunları başlatabilirsiniz.

Ağ üzerinden entegrasyon testleri yapmak isterseniz, web api servisini kendi kendine barındırabilirsiniz. Ardından test projesine web api istemci paketini Install-Package Microsoft.AspNet.WebApi.Client yükleyin ve istemci üzerinden çağırın.

bağlayan Örnek ve (bağlantısından) manuel örnekleme:

[TestClass] 
public class TestSimpleProductController 
{ 
    [TestMethod] 
    public void GetAllProducts_ShouldReturnAllProducts() 
    { 
     var testProducts = GetTestProducts(); 
     var controller = new SimpleProductController(testProducts); 

     var result = controller.GetAllProducts() as List<Product>; 
     Assert.AreEqual(testProducts.Count, result.Count); 
    } 

Örnek (bağlantısından) web API istemcisi kullanarak:

http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api: Kendi adına

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("http://localhost:9000/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new     MediaTypeWithQualityHeaderValue("application/json")); 

    // New code: 
    HttpResponseMessage response = await client.GetAsync("api/products/1"); 
    if (response.IsSuccessStatusCode) 
    { 
     Product product = await response.Content.ReadAsAsync>Product>(); 
     Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category); 
    } 
} 

barındırma hizmeti

Web Api client için:

Install-Package Microsoft.AspNet.WebApi.Client 
+0

Yorum için teşekkürler. Şimdiye kadar yaptığım şey buydu (test senaryolarımın metotlarımı manuel olarak kullanarak). Web api'yi kendi kendine barındırma konusunda olduğu gibi, bu gerçekten ilginç. Link için teşekkürler! – PersuitOfPerfection

+0

Güzel çünkü api testini bağımlı projeden ayırabilirsiniz. – wbennett

6

Web API denetleyicilerine ve eylemlerine erişim URL'lere dayanmaktadır. Artık ayrı projelerde olduklarından, 'a ihtiyacınız var, her iki projeyi de çalıştırın ve API'nizi MVC projesi için kullanılabilir hale getirin.

ve size MVC proje erişebilirsiniz böylece bu arada size web API için CORS proje imkan vermelidir.

+0

Yani, Web Api projemi bir görsel stüdyo örneğinden çalıştırırsam ve web sitemi başka bir örnekten başlatırsam, Web Api'm web sitemden http çağrıları yapabileceğim anlamına mı geliyor? Teşekkürler – PersuitOfPerfection

+1

@PersuitOfPerfection Visual Studio'nun açık birden çok örneğine ihtiyacınız yoktur.Çözümünüze sağ tıklayın, Ortak Özellikler'i seçin ve daha sonra Başlangıç ​​Projesinde birden çok başlangıç ​​projesi belirtebilirsiniz. Eğer api'niz 4000 numaralı bağlantı noktasında çalışıyorsa, web siteniz sadece http: // localhost: 4000'e ulaşır. –

+0

evet demek istediğim budur, ama sanırım görsel stüdyonun 2 örneğini kullanmanıza gerek yok. onları bir örnekten çalıştırabilirsiniz. –

2

Sen, referans olarak WEB API projesine eklemek API hizmeti tüketmek için HTTP istemci nesne kullanmak gerekir ... ve emin olmak gerekmez web api projeyi

public async Task <ActionResult> Index() 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://localhost:54568/"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      HttpResponseMessage response = await client.GetAsync("api/Values/"); //API controller name 
      if (response.IsSuccessStatusCode) 
      { 
       var result = await response.Content.ReadAsAsync<YourReturnDataType>(); 
       if (result != null) 
        var output = result; 
      } 
     } 

     return View("Return your model here"); 
    } 
+0

takdir: "HttpClient bir uygulamanın ömrü boyunca bir kez örneği ve yeniden amaçlanmıştır aşağıdaki koşullar SocketException hatalara neden olabilir. istek başına yeni HttpClient örneğini oluşturma Sunucusu. ağır yük altında. " https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client –