2012-04-24 14 views
9

Bir ASP.NET Web API'sini doğrudan kod arkasından nasıl arayabilirim? Ya da getJSON yöntemini kod arkasından alan javascript işlevimi çağırmalı mıyım? takdirASP.NET Web API'sini koddan geri çağırın

function createFile() { 
     $.getJSON("api/file/createfile", 
     function (data) { 
      $("#Result").append('Success!'); 
     }); 
    } 

Herhangi işaretçiler:

Genellikle böyle bir şey var. TIA.

* WebForms kullanıyorum.

+0

siz "kod arkasında" ile ne demek istiyorsunuz? – SLaks

+0

@SLaks Bir asp: düğmesi var mı. Tıklama olayında (sunucu tarafı/kod arkası), birkaç şey yapmak ve Web API eylemimi (createfile) çağırmak istiyorum. Umarım anlaşılırım. – Rivka

+0

Pls kod örneğimi kontrol et. Belki biraz naif ve basit, ama sadece sizin için 2 fikir olsun. –

cevap

13

Web hizmetini kendiniz aramanız gerekiyorsa, HttpClientas described by Henrik Neilsen'u kullanmayı deneyebilirsiniz.

Updated HTTPClient Samples

Basit bir örnek:

// Create an HttpClient instance 
HttpClient client = new HttpClient(); 

// Send a request asynchronously continue when complete 
client.GetAsync(_address).ContinueWith( 
    (requestTask) => 
    { 
     // Get HTTP response from completed task. 
     HttpResponseMessage response = requestTask.Result; 

     // Check that response was successful or throw exception 
     response.EnsureSuccessStatusCode(); 

     // Read response asynchronously as JsonValue 
     response.Content.ReadAsAsync<JsonArray>().ContinueWith( 
        (readTask) => 
        { 
         var result = readTask.Result 
         //Do something with the result     
        }); 
    }); 
+0

Teşekkürler! Tam olarak ne yapmaya çalıştığımı. Muhtemelen iyi açıklamak için e/o için özür dilerim. Tüm yardımlarınızı takdir edin. – Rivka

+0

Bunu etc.net requestTask.Result için dönüştürmeye çalıştığımda "sonuç bir system.threading.tasks.task üyesi değil" diyerek derlemeyi başaramaz ama C# içinde httpresponsemessage içinde bulunur. Bu özellik vb.net değil mi?dönüşüm yapmak için telerek dönüşüm sitesini kullandım – Matma

3

Pek çok yazılım mimarisinde önerilen kitap, (API) denetleyici kodunuza herhangi bir iş mantığı koymamanızdır. Doğru şekilde uyguladığınızı varsayarsak, örneğin Denetleyici kodunuz bir Hizmet sınıfı veya cephesi aracılığıyla iş mantığına halihazırda erişirse, benim önerim 'ön kapıdan geçmek yerine aynı Servis sınıfını/cepheyi yeniden kullanmanızdır. '(böylece arkadan kodundan JSON çağrı yaparak) temel ve naieve Örneğin

:

public class MyController1: ApiController { 

    public string CreateFile() { 
     var appService = new AppService(); 
     var result = appService.CreateFile(); 
     return result; 
    } 

} 

public class MyController2: ApiController { 

    public string CreateFile() { 
     var appService = new AppService(); 
     var result = appService.CreateFile(); 
     return result; 
    } 
} 

AppService sınıfı iş mantığını kapsüller (ve başka katmana yaşıyor) ve sizin için kolaylaştırır mantığınıza erişin:

public class AppService: IAppService { 

    public string MyBusinessLogic1Method() { 
     .... 
     return result; 
    } 
    public string CreateFile() { 

      using (var writer = new StreamWriter..blah die blah { 
      ..... 
      return 'whatever result'; 
      } 

    } 

    ... 
} 
+2

'Doğru' kullanımınızın yanlış olduğunu iddia ederim. Bütün kontrolör/cephe/etc yolunun muazzam miktarda harcanan kod/insan saati olduğunu söyleyenler gibi, bunu savunan tasarım paradigmaları da vardır. Reddetmeyeceğim; bununla birlikte, çoğu, durumsal olarak bağımlı olan yazılım tasarımı için birçok 'Doğru' tanımının olduğunu söylüyorum. – NotMe

+1

Doğru, İngilizcem mükemmel değil, 'Doğru' doğru kelime değildi. –

+1

Örnek sağladığınız için teşekkür ederiz. Sanırım sorularım, sınıflar hakkında ne söylediğini görmeme rağmen, sorum, WebAPI'de CreateFile() yönteminin gerçek yöntem çağrısı üzerinedir. Bunu bir Web Forms uygulamasında bir sunucu tarafı olayından nasıl çağırmalıyım? En iyi yaklaşım nedir? – Rivka

6

Mantığı ayrı bir arka uç sınıfına yerleştirmeli ve doğrudan sizden arka planda ve Web API eyleminden çağırmalısınız.

+0

bazı örnek kodlar yardımcı olur ... "Kodunuzu doğrudan arkasından doğrudan çağır" bölümünde kaldım - Genellikle JS fonksiyonumla yapıyorum. – Rivka

+0

@Becky: Direkt kodunuzu doğrudan arkasından kodlayın. – SLaks