运行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。)
更新
我为route地址修改了正则表达式email,这使问题更严重。
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。
答案 0 :(得分:4)
我不认为这是一个MVC错误,更多的是http的限制?我们遇到了同样的问题,最终交换了“。”为“!”在URL中然后将它们转换回“。”在控制器中。
答案 1 :(得分:1)
routes.MapRoute(
"QuerySomething",
"QueryStuff/Index/{*aString}",
new { controller = "QueryStuff", action = "Index", aString = UrlParameter.Optional } // Parameter defaults
);
您忘记了路线中的通配符。 (注意上面的aString
)但是,使用它们时需要注意的一点是它也匹配http://serverName/QueryStuff/Index/something.com/blah/blah/blah/blah
点是文件扩展名分隔符,这就是它不包括在内的原因。如果你知道你总是有扩展名,你也可以这样做:
routes.MapRoute(
"QuerySomething",
"QueryStuff/Index/{aString}.{extension}",
new { controller = "QueryStuff", action = "Index", aString = UrlParameter.Optional } // Parameter defaults
);