警告:我有一个 MVC 站点作为 .Net WebForms 站点中的一个区域。我会提前解释一下,因为它可以阐明我的问题。
现在我遇到的问题是我正在路由可能包含特殊字符(如apostrophe
(单引号))的值。但是,如果我没有对它正确路由的值进行编码,那么Kendo MVC Grid
当使用未编码的单引号作为过滤器时,我会创建一个无效的模板。
http://{base}/{area}/{controller}/{view}?customerName=Justin's%20Instance - Throws Invalid Template Error
http://{base}/{area}/{controller}/{view}?customerName=Justin's%20Instance - No Error
所以我认为最简单的解决方案是在将查询字符串参数作为路由值传递之前对其进行正确编码。这导致了双重编码的情况。然后我发现了MvcHtmlString.Create
哪个是专门设计用来告诉路由系统不要重新编码字符串值的。但是,它仍然是双重编码。
var customerNameEncoded = MvcHtmlString.Create(HttpUtility.HtmlEncode(model.Name));
var routeResult = RedirectToAction("ManageCustomer", new { customerName = customerNameEncoded });
return routeResult;
这是创建的 URL:
http://{base/{area}/{controller}/{view}?customerName=Justin%26%2339%3Bs%20Instance
如您所见, ' 再次被编码。这引发了以下错误。
> System.Web.HttpRequestValidationException A potentially dangerous
> Request.QueryString value was detected from the client
> (customerName="Justin's Instance").
web.config
MVC 区域具有以下标记:validateRequest="false"
对于web.config
整个网站有以下几点:httpRuntime requestValidationMode="2.0"
关于为什么这个字符串被双重编码以及如何阻止它这样做的任何想法?