%20后跟斜线后跟更多数据导致ASP.NET MVC 3路由失败?

时间:2011-01-31 16:53:03

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

当字符%20出现在参数之间时,我的MVC路由会停止考虑字符串。

为什么会这样,以及如何在我的网址中处理“%20”字符?

示例网址

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 个答案:

答案 0 :(得分:3)

如果空格位于下一个斜杠之前的URL的任何部分的末尾,则会在HttpException方法中抛出System.Web.Util.FileUtil.CheckSuspiciousPhysicalPath(),该方法由MVC处理,您将获得HTTP 404响应。

您可以通过选中Throw的复选框验证自己:

  1. Visual Studio
  2. Debug
  3. Exceptions
  4. Common Language Runtime Exceptions
  5. 通常,您的网址中不应包含空格。我个人格式化我的网址,所有空格都变成破折号( - )。

答案 1 :(得分:0)

我认为问题在于,在不起作用的示例中,因为它无法解析为有效的URL,因此将被视为

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

相反,您可以安全地从该网址中安全删除%20

答案 2 :(得分:0)

检查表的id字段是否不是字符串(nchar(x))。如果是,请检查相应的id是否具有类型声明中定义的精确长度。如果不是(如果它有较少的字符),那就是问题(它应该具有你声明的精确长度)。这对我有用。