2016-06-03 38 views
5

GET modelini kullanmanın aksine birden çok eğik çizgi içeren argümanlardan geçen birçok site tarafından kullanılan bir kuralı takip etmeye çalışıyorum. Aşağıdaki Şu anda bu (çoğunlukla) çalışma kullanarak varASP.NET MVC 4 Parametreler Forward Slashes tarafından ayrılan "/" düzgün bir şekilde geçmiyor "

http://www.foo.bar/controller/action/a/b/c 

:

Bu şekilde

http://www.foo.bar/controller/action?arg1=a&arg2=b&arg3=c 

: is

, ben gibi bir URL tüketmek arıyorum
public static void RegisterRoutes(RouteCollection routes) { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Sandbox", 
      url: "Sandbox/{action}/{*args}", 
      defaults: new { controller = "Sandbox", action = "Index", args = UrlParameter.Optional } 

     ); 
    } 

Ancak,

gibi bir şeyden geçersem
http://www.foo.bar/Sandbox/Index/a/ 

Kontrol ve işlem

http://www.foo.bar/Sandbox/Index/a 

veya

uygun olarak adlandırılır:

public ActionResult Index(string args) 
{ 
    return View(); 
} 

fakat argümalar boş. Ben böyle bir şey geçmek durumunda

Ancak:

http://www.foo.bar.com/Sandbox/Index/a/b 

Sonra args istediğiniz gibi, "a/b" dir.

SO ve diğer web sitelerini inceliyorum, ancak çözümü bulamıyor gibiyim.

Bu davranışı gidermek için eksik olduğum belli bir şey var mı?

Yanlış terminolojiyi mi arıyorum?

Not: Bu sorunu Windows Kimlik Doğrulaması kullanarak yepyeni bir ASP.NET uygulamasıyla yeniden sunabildim. Bütün bu yapıldı:

  1. Değişim Kimlik üzerinde
  2. tıklayın
  3. Seç Windows Kimlik
  4. RouteConfig.cs
  5. Harita Rota yukarıda ekle MVC seç VS 2015
  6. yılında ASP.NET uygulaması oluşturun
  7. SandboxController.cs dosyasını oluştur ve args parametresini Dizin'e ekle
  8. Dizin Oluşturma.html görüntüleme
  9. Yeniden oluşturma http://localhost:55383/Sandbox/Index/a/b

Herhangi yardım kullanarak http://localhost:55383/Sandbox/Index/a

  • Repro beklenen davranıştır kullanarak sorun çok takdir edilmektedir. Teşekkür ederim! Benzer soru, ama bana yardımcı olmadı: URLs with slash in parameter?

  • +1

    tüm yolları ve sipariş göster –

    +0

    Evet. Ekledim Ve şu an çok aptalım. Varsayılanın ilk kez çağrıldığını anladım. – Thumper

    cevap

    3

    Boşver ... İşte sorun ...

    MapRoute, önce varsayılan yolu çağırıyor. Bunu düzeltmek için Varsayılan harita rotasını Sandbox rotası ile değiştirdim.

    Umarım bu birilerine yardımcı olur.

    Çalışma Çözüm: (? Da varsayılan rota var mı)

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