【发布时间】:2011-03-21 15:43:25
【问题描述】:
运行 IIS6。
所以, '。'在 IIS6 中不起作用,但它们在 Visual Studio 调试器和 IIS7 中工作正常。这是重现的步骤。
复制步骤:
- 从一个空白的 MVC 3 项目开始。
- 添加一个名为“索引”的新视图并接受默认值。
- 配置 RegisterRoutes() 如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"QuerySomething",
"QueryStuff/Index/{*aString}",
new { controller = "QueryStuff", action = "Index", aString = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
现在,添加一个返回 Json 的控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class QueryStuffController : Controller
{
//
// GET: /QueryStuff/
public ActionResult Index(string aString)
{
return Json("aString:oye",JsonRequestBehavior.AllowGet);
}
}
}
-
验证页面是否可访问:
你应该得到 http 200。
-
现在尝试使用 '.' 到达那里。在路径中
您应该会收到 http 404 错误。 (请注意,通过 Visual Studio 调试器运行时,此错误无法重现。必须将代码部署到 IIS。)
更新
我将 email 地址的正则表达式修改为 route,这让问题变得更糟。
routes.MapRoute(
"QuerySomething",
"QueryStuff/Index/{aString}"
, new { controller = "QuerySomething", action = "Index" },
new { aString = @"\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b" }
);
每次都是 404。
【问题讨论】:
标签: asp.net-mvc-3