運行IIS6。
所以,'。'不在IIS6中工作,但它們在Visual Studio調試器和IIS7中正常工作。以下是重現的步驟。MVC 3不允許'。'在URL路徑中使用IIS6時
重現步驟:
- 從一個空白的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調試器中運行時,不reproduceable。我們必須將代碼部署到IIS)
UPDATE
我修改正則表達式來route爲email地址,它使問題更糟。
routes.MapRoute(
"QuerySomething",
"QueryStuff/Index/{aString}"
, new { controller = "QuerySomething", action = "Index" },
new { aString = @"\b[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b" }
);
有了這個它每次404。
這是我希望避免做的事情。 – 2011-03-21 17:14:54
@ColinDesmond:我不確定你要去哪裏「限制http」位。 HTTP在'.'中沒有問題,它們通常用於URL和URI(以及Internet可路由的域名需要它們)。也許你的意思是RegEx或Web服務器在路由規則中解析'.'? – Powerlord 2011-03-21 18:30:14
@Colin Desmond - 我確信這個問題與IIS6有關。由於BuildStarted無法重現IIS7上的問題,而且事實上這件事在Visual Studio調試器中可以正常工作。我用你的想法來取代'。'字符與'!'。它可以很好地解決問題,直到像@Haacked這樣的人確認問題。 – 2011-03-21 19:08:27