我有一个遗留代码问题,要求我支持随机 URL,就好像它们是对主页的请求一样。某些 URL 中包含会生成错误“从客户端 (&) 检测到潜在危险的 Request.Path 值”的字符。该站点使用 ASP.Net MVC 3(C#)编写,并在 IIS 7.5 上运行。
这是一个示例网址...
http://mywebsite.example/Test123/This_&_That
以下是我如何设置包罗万象的路线(我还有其他路线可以捕获特定页面)...
routes.MapRoute(
"Default", // Route name
"{garb1}/{garb2}", // URL with parameters
new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults
);
我已将以下内容添加到我的 web.config
文件中...
<configuration>
<system.web>
<pages validateRequest="false" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
<configuration>
我还在应该捕获 url 的操作中添加了 ValidateInput 属性...
public class WebsiteController : Controller
{
[ValidateInput(false)]
public ActionResult Home()
{
return View();
}
}
但我仍然收到错误消息。任何想法为什么?我错过了什么?现在我只是在我的本地开发服务器上运行(我还没有在生产中尝试过这些修复)。
虽然您可以在配置文件中尝试这些设置
<system.web>
<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
<pages validateRequest="false" />
</system.web>
我会避免在 URL 路径中使用像“&”这样的字符,用下划线替换它们。
我遇到过这种类型的错误。从剃须刀调用函数。
public ActionResult EditorAjax(int id, int? jobId, string type = ""){}
通过更改线路解决了这个问题
从
<a href="/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" />
至
<a href="/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" />
我的 route.config 在哪里
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "RPMS.Controllers" } // Parameter defaults
);
EditorAjax
和 ApIController
(与视图控制器相比)吗?我两者都有,ApiController
很好地接受 URL 参数,因为默认值可能允许它,因为这是一种常见用法。我现在只有一个问题,我想将 URL 参数添加到视图控制器。
如果您只想在 mvc 中为少数文本框允许 Html 标签
你可以做一件事
在控制器中
[ValidateInput(false)]
public ActionResult CreateNewHtml() //view
{
return View();
}
[ValidateInput(false)]
[HttpPost]
public ActionResult CreateNewHtml(cbs obj)//view cbs is database class
{
repo.AddHtml(obj);
return View();
}
当我们试图弄清楚为什么我们的 Silverlight ArcGIS 地图查看器没有加载地图时,我们在 Fiddler 中遇到了同样的错误。在我们的例子中,这是代码中 URL 的拼写错误。出于某种原因,那里有一个等号。
http:=//someurltosome/awesome/place
而不是
http://someurltosome/awesome/place
去掉那个等号后,它工作得很好(当然)。
检查以下行是否存在于您的 web.config 文件中
<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>