SORU
2 Ocak 2010, CUMARTESİ


Nasıl ASP.NET MVC 1 HttpContextBase gelen HttpContext bir nesne alabilirim?

WebForms/MVC-agnostik araçları ile çalışıyorum, ve HttpContext örneği HttpContextBase bir nesneye bir referans elde etmek istiyorum. Bu da uyumsuz (HttpContext.Current zaman uyumsuz bir istek sırasında null döner) çalışmak istiyorum çünkü HttpContext.Current kullanamam. HttpContextWrapper, ama yanlış yöne gidiyor farkındayım.

CEVAP
31 Aralık 2010, Cuma


En basit şekilde uygulama, ApplicationInstance, ve Context özelliğini kullanmak için:

// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;

(yorumlar bu dikkat eden Ishmael Smyrnow sayesinde)

Orijinal cevabı:

Özellikle eğer teslim oldum HttpContextBase örnek türü ise, çalışma zamanı HttpContextWrapper. Aşağıdaki örnek bunu göstermektedir. Bunu yapabilir bir yöntem aradı Foo kabul kapsamında HttpContextBase ama sonra ihtiyaçları için bir arama yöntemi olarak, bir üçüncü parti Meclisi (olmayabilir iyi şans için Değiştir) olması bekleniyor içeriği için yazılan HttpContext.

void Foo(HttpContextBase context) 
{
    var app = (HttpApplication) context.GetService(typeof(HttpApplication));
    ThirdParty.Bar.Baz(app.Context);
}

// Somewhere in assembly and namespace ThirdParty,
// in a class called Bar, there is Baz expecting HttpContext:

static void Baz(HttpContext context) { /* ... */ }

HttpContextBase bir yöntem sonucu GetService denilen IServiceProvider destek var. HttpContextWrapper GetService uygulanması için temsilciler GetService geçersiz HttpContext örnek sarılmış. HttpContext GetService uygulama şüphelilerHttpApplication, , * HttpRequest*28 ve her zamanki gibi sorgulamak için izin verir. HttpApplication özellik Context çağırdı ve HttpContext bir örnek verir. Yani bir GetService ile HttpApplication HttpContextBase HttpApplication döndü örneği Context özelliği okuyarak takip sorarak HttpContext sarılmış örneği alır.

HttpContextBase, GetService HttpContextBase yok HttpContext HttpContext uyguladığından IServiceProvider.GetService explicity bu halkın bir üyesi olarak görünmez aksine.

Aklınızda bulundurun Foo artık test edilebilir, çünkü buna dayanmaktadır olmak mümkün ambalajını açmak için temel HttpContext sırasında Test ve ki imkansıza için sahte/saplama. Bu cevap nokta, ancak, soru çözmek için, “Nasıl HttpContextBase gelen HttpContext bir nesne alabilirim?”,kelimenin tam anlamıyla. Resimli tekniği mutlaka değiştirmek lüksüne sahip değilsin bileşenleri arasında kendinizi sıkışmış bulmak durumlarda yararlıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Artorius FullPower

    Artorius Ful

    29 Temmuz 2007
  • How To Cook That

    How To Cook

    16 NİSAN 2011
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008