路線

2017-09-01 78 views
1

我們有一個路線定義爲路線

routes.MapRoute(
      name: "SearchFor", 
      url: "Search/For/{text}", 
      defaults: new 
      { 
       controller = "Search", 
       action = "For", 
       text = UrlParameter.Optional 
      } 

繼新客戶,其數據正好含有大量的正斜線,我們有一個問題,textitem/1。爲了解決這個問題已更新路線包括包羅萬象如下

routes.MapRoute(
      name: "SearchFor", 
      url: "Search/For/{*text}", 
      defaults: new 
      { 
       controller = "Search", 
       action = "For", 
       text = UrlParameter.Optional 
      } 

然而,這並沒有幫助,如果text包含正斜槓前導空格例如item /1這會導致IIS返回404錯誤。

是否有可能解決這個問題,而不以某種方式編碼文本參數?

回答

2

爲了在URL的路徑中使用空格(和大多數其他特殊字符),必須進行URL編碼。但是,這是一個不好的做法,應該避免。請參閱(Please) Stop Using Unsafe Characters in URLs

更好的方法是將查詢字符串與URL編碼結合起來用於不安全的字符。

routes.MapRoute(
     name: "SearchFor", 
     url: "Search", 
     defaults: new 
     { 
      controller = "Search", 
      action = "For" 
     } 

而且使用像...

/search?text=Some%20Text 

某些防火牆和服務器不能正確地解釋URL編碼的信息時,它是路徑的一部分,但查詢字符串信息更加可靠。更不用說上述文章中提到的安全問題。

或者,你可以設計你的URL來代替不安全的字符安全的...

/search/for/some-text 

...但是,這將需要更多的考慮到覆蓋所有的特殊情況下,爲您的特定使用情況。實質上,您的應用程序需要足夠聰明,可以將安全字符轉換爲不安全字符。

但是,無論您如何解決這個問題,URL首先是機器可讀的,您在設計時必須考慮到這一點。

+0

感謝您提供非常有用的信息,尤其是那篇文章。 – Fishcake