当字符%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
答案 0 :(得分:3)
如果空格位于下一个斜杠之前的URL的任何部分的末尾,则会在HttpException
方法中抛出System.Web.Util.FileUtil.CheckSuspiciousPhysicalPath()
,该方法由MVC处理,您将获得HTTP 404响应。
您可以通过选中Throw
的复选框验证自己:
Visual Studio
Debug
Exceptions
Common Language Runtime Exceptions
通常,您的网址中不应包含空格。我个人格式化我的网址,所有空格都变成破折号( - )。
答案 1 :(得分:0)
我认为问题在于,在不起作用的示例中,因为它无法解析为有效的URL,因此将被视为
http://localhost:40494/ListContents/Delete/asdf /5430f394...
相反,您可以安全地从该网址中安全删除%20
。
答案 2 :(得分:0)
检查表的id字段是否不是字符串(nchar(x))。如果是,请检查相应的id是否具有类型声明中定义的精确长度。如果不是(如果它有较少的字符),那就是问题(它应该具有你声明的精确长度)。这对我有用。