2009-12-18 17 views
9

HttpContext'e erişmeden bir RouteCollection öğesinden URL'ler oluşturmak istiyorum. RouteCollection uygulamasının yoluna bakıldığında, sanal yolun elde edilmesi için tüm yöntemlerin RequestContext'e erişmesi gerekir.ASP.NET MVC - Http/Request Bağlamı Olmayan Yolları Oluşturma

HttpContext ile alay ederek bu konuda çalıştım ancak bu RhinoMocks'a garip bir bağımlılık katar ve makul bir çözüm değildir. İçerik dışında Url üretmek için başka seçeneklerim var mı?

cevap

1

Üzgünüz, ama MVC çerçevesinde alay etmeye alışkınım. Teste girer girmez, buna ihtiyacın olacak. Orada çok fazla var: HttpContext, Session, Server - kontrol cihazınıza sızan her şey. Yolu oluşturmak istiyorsanız, ya HttpContext ile konuşmanız gerekir (MVC'de, bu aslında HttpContextBase'dir, bu yüzden tahmin ettiğim kendi somut uygulamanızı yazabilirsiniz) ya da alay etmeniz gerekir.

+1

Test durumları için alay etmeye karşı değilim. Ancak, bunu bir testte yapmıyorum. Eşzamansız bir servisle e-postalarımı üretiyorum. Eşzamansız olduğundan HttpRequest'e erişim yoktur. – bromanko

+0

Muhtemelen bir işlem e-posta oluşturan işlemi başlatıyor. Yönlendirme çağrısını eylemin içinden gerçekleştirmeyi deneyin (RequestContext'e erişiminiz olduğunda), daha sonra sonucu e-postaları oluşturan tüm işlemlere iletin. – Levi

+0

E-postaların web tarafından tetiklenmeden oluşturulduğu durumlar var. Örneğin, günlük e-posta veya hatırlatma e-postaları. – bromanko

3

Gerçekten de harika bir soru. Yönlendirme, uygulama kök URL'sinin yanı sıra URL'de de bulunan tüm çerez biçimlerini veya oturum çerezlerini almak gibi çalışan bir ASP.NET uygulamasından çağrılma konusunda bazı bağımlılıklara sahiptir. Sahte nesneler oluştururken teorik bir çözüm olsa da, çalışma zamanında kullanılması kesinlikle tavsiye edilmez.

Benim önerim, bu durum için yönlendirmeyi hiç kullanmamak ve URL'leri e-postalara kodlamaktır. Bir e-postadaki bağlantıların, tam URL'lere (ana makine adı + yol) sahip olması ve yönlendirmenin URL için ana makine adını bile oluşturamaması gerekir. Bu, zaten sabit kodlamanız gereken bir şeydir.