2009-09-17 22 views
11

İndirmeler adı verilen bir MVC denetleyicim var. http://mysite/DownloadsASP.NET MVC'de aynı ada sahip klasör ve denetleyici nasıl bulunur?

Ayrıca fiziksel bir dosyayı http://mysite/Downloads/MyFile.zip adlı fiziksel bir klasöre koymak istiyorum.

Yalnızca bir klasör oluşturursam, http://mysite/Downloads'a göz atarken 403 alırım. (Büyük olasılıkla dizin taraması nedeniyle devre dışı bırakılmıştır) Ancak MVC denetleyicisinin bunun yerine kullanılmasını istiyorum.

Bunu nasıl yaparım?

cevap

5

http://mysite/Downloads/{ACTION}'a bakarsanız, denetleyicilerinizin eylemini tetikler.

Örneğinizde çalışmayan tek şey, eylemsiz /Downloads. Sizi varsayılan işleminize yönlendirmek için bu URL'yi tekrar yazabilirsiniz. Ayrıca, routehandler'ın indirme dosyalarınızı görmezden gelmeniz gerekir. Global.asax dosyanıza, tüm zip dosyalarını veya uygun olan diğer göz ardı etme modellerini yok saymak için bir satır ekleyebilirsiniz.

routes.Ignore("{resource}.zip"); 
4

.NET 3.5 olduğundan, rota mevcut dosyaları yapabilirsiniz:

\Markets 
\Markets\audio.mp3 

varsayarsak: Yani

public static void RegisterRoutes(RouteCollection routes) { 
    routes.RouteExistingFiles = true; 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", 
          action = "Index", 
          id = UrlParameter.Optional } 
    ); 
} 

biz site köküne bir klasör vardı varsayalım bir audio.mp3 dosyasını içeren Markets denilen MarketsController'un varlığı, Markets için bir istek yaparsak, Markets/Index'a yönlendirilir.

/Markets/audio.mp3 numaralı telefonu talep edersek, mp3 dosyasını alırdık ve Markets/AnythingElse talep edersek normal yönlendirme uygulanır.

İlgili konular