2011-01-31 35 views
3

當字符%20出現在參數之間的url時,我的MVC路由就會停止考慮一個字符串。%20後跟斜槓後面跟着更多的數據導致ASP.NET MVC 3路由失敗?

這是爲什麼,我如何處理我的URL中的處理「%20」字符?

例URL

http://localhost:40494/ListContents/Delete/asdf%20/5430f394... 

public ActionResult Delete(string DNSName, Guid id) 
{...} 

routes.MapRoute(
    "Delete", // Route name 
    "ListContents/Delete/{DNSName}/{id}", // URL with parameters 
    new { controller = "ListContents", action = "Delete" } // Parameter defaults 
    ); 

然而 以下兩個網址,做工精細

http://localhost:40494/ListContents/Delete/asdf%20SOMETHING_HERE/5430f394... 

http://localhost:40494/ListContents/Delete/%20asdf/5430f394-946c-4f82-ac13-9d5efafe9127 

回答

3

如果在下一個斜槓前的URL的任何部分的末尾有一個空白空間,它會在由MVC處理的System.Web.Util.FileUtil.CheckSuspiciousPhysicalPath()方法中拋出HttpException,您將得到一個HTTP 404響應。

您可以驗證自己被選中複選框Throw在:

  1. Visual Studio
  2. Debug
  3. Exceptions
  4. Common Language Runtime Exceptions

一般來說,你不應該在空的空間您的網址。我親自格式化我的網址,所有的空間變成一個破折號( - )。

0

我認爲問題是,在例如其中不工作是因爲它可以」 t被解析爲有效的URL,它將被解讀爲

http://localhost:40494/ListContents/Delete/asdf /5430f394...

相反,您可以安全地從該網址安全刪除%20

+0

該空間在那裏,因爲它是由另一頁上的HTML.ActionLink自動生成的。該空間來自後備數據庫。確保這不會發生在我的其他頁面上的最佳方法是什麼? – LamonteCristo 2011-01-31 17:09:13

+0

@ makerofthings7:對URL字符串進行搜索,並確保它在`%20`前後沒有`/` - 這只是我的猜測。目前我不確定更好的方法。 – VoodooChild 2011-01-31 17:27:41

0

檢查表的id字段是否不是字符串(nchar(x))。如果是,請檢查相應的ID是否具有類型聲明中定義的確切長度。如果沒有(如果它有更少的字符),那就是問題(它應該有你聲明的確切長度)。這對我有效。