C#

2014-04-18 5 views
8

kullanarak JSON verilerini kabul eden bir genel işleyiciye veri gönder JQuery kullanarak veri yüklemek için bir ASP.NET Genel İşleyicisine erişmekte olduğum bir durum var. Ancak JavaScript'ten yüklenen veriler arama motoru tarayıcılarına görünmediğinden, C# 'den veri yüklemeye ve JQuery için önbelleğe almaya karar verdim. İşleyicimin arkasında kodda tekrar uygulamak istemediğim bir çok mantık var.C#

public void ProcessRequest(HttpContext context) 
     { 
      JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
      string jsonString = string.Empty; 

      context.Request.InputStream.Position = 0; 
      using (var inputStream = new System.IO.StreamReader(context.Request.InputStream)) 
      { 
       jsonString = inputStream.ReadToEnd(); 
      } 

      ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString); 
      context.Response.ContentType = "text/plain"; 
      switch (contentType.typeOfContent) 
      { 
       case 1: context.Response.Write(getUserControlMarkup("SideContent", context, contentType.UCArgs)); 
        break; 
      } 
     } 

gelen C# işlevini getUserControlMarkup() çağırabilir ama bunu arama sırasında bazı URL bazlı koşullar uygulamak zorunda kalacak: İşte benim Handler kodudur. contentType.typeOfContent aslında URL parametrelerini temel alır.

JSON verilerini bu işleyiciye göndermek mümkün ise, lütfen bana bunu nasıl yapacağımı söyleyin. Böyle işleyicisi erişmeye çalışıyorum:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Common.host + "Handlers/SideContentLoader.ashx?typeOfContent=1&UCArgs=cdata"); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Ama onun çizgisinde Handler kodunda NullReferenceException vererek: ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString);

+0

? Bazı kısmi sayfaları veya sayfa doluluklarını güncellemeyi denediniz mi? – viyancs

+0

İçeriği JavaScript’ten bir div’e yüklemeyi deniyorum ve aynı zamanda arama motorlarına da görünür olmasını istedim. –

+2

Sunucu tarafında C# 'den çağırdığınızdan, neden genel bir işleyici ile rahatsız oluyorsunuz? Neden sadece bir yöntemi doğrudan aramıyoruz? – mason

cevap

2

bunu yapmak için ancak bir HTTP isteği kullanımına bir içerik eklemek istiyorum neden emin değil: JavaScript yüklenen veriler arama motoru tarayıcılarının görünür olmadığından Ne demek

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Common.host + "Handlers/SideContentLoader.ashx?typeOfContent=1&UCArgs=cdata"); 
     var requestStream = request.GetRequestStream(); 
     using (var sw = new StreamWriter(requestStream)) 
     { 
      sw.Write(json); 
     } 
+0

Bir hata alıyorum 'var requestStream = request.GetRequestStream(); ' Hata:' Bu fiil-türüyle içerik gövdesi gönderilemiyor.' –

+0

Çözüldü. Burada çözüm bulundu: http://stackoverflow.com/questions/3981564/cannot-send-a-content-body-with-this-verb-type ve şimdi çalışıyor teşekkürler :) –

2

Probleminiz ASP Javascript kullanarak Div ​​içine

  1. Yük İçerik olduğunu .NET C# kullanarak.
  2. Aramaya Görünür Motorları

  1. Sunucuya İsteği sunucu ile istemci Sen Ajax kullanarak yapabilirsiniz arasında iletişim kurmak için bazı işleyici veya hizmet vardır Kısmi Page güncelleyin istiyorum My Opinion.

Eğer Jquery kullanırsanız, bu fonksiyon jQuery.ajax(); örnek deneyebilirsiniz:

    $.ajax({ 
        url:"/webserver.aspx", 
        data:{id:1}, 
        type:'POST', 
        success: function(data) { 
           //do it success function 
         } 
        }) ; 

Sonraki Adım JSON veya XML formatında olarak sonuçlanacaktır gerektiğini Kişisel ASP.NET arkasında Kanununda Web Service oluşturma ne olursa olsun size Eğer burada jQuery.ajax();

2.Visible kullanarak ayrıştırma Arama motorunun sayfanızı dizine eklemesine izin veriyorsanız, sorun değil. bazı Ajax Kodu, Arama motoru sayfanızı dizine ekleyecektir.

+0

Arama motoru görünürlüğü benim sorunum değil ve ayrıca "div içine içerik yükleme benim sorunum". Benim sorunum, JSON verilerini kod arkasından bir işleyiciye göndermek istiyorum. –

+0

Ben sunucu tarafında kod düşünüyorum, eğer kod arkasında JSON veri göndermek istiyorsanız arama fonksiyonu ve params ile çalışmak gerekir, o zaman sizin params JSON türü ve bu kodu http: //weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx – viyancs

6

Bunu yapmanın güzel bir yolu Yönlendirme'yi kullanmaktır. Global'de .asax

protected void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
}   

private void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapHttpHandlerRoute("MyRouteName", "Something/GetData/{par1}/{par2}/data.json", "~/MyHandler.ashx"); 
} 

Bu /Something/GetData/XXX/YYY/data.json üzerinde yöneticisini çağırmak için ASP.Net anlatıyor.

İşleyicide, Rota Parametrelerini kullanabilirsiniz: context.Request.RequestContext.RouteData.Values["par1"].

paletli yeter ki (yani robotlar dosya ya bağlantılar)

+0

Hala anlama. JSON verilerini bu işleyiciye kod arkasından nasıl gönderebilirim? –

+0

JSON içeriğini bir http isteğine eklemek için başka bir yanıt daha ekledim. Bu yardımcı olur umarım. –