获取“从客户端(&)检测到潜在危险的Request.Path值”

时间:2011-05-17 02:11:42

标签: asp.net-mvc asp.net-mvc-3

我遇到遗留代码问题,要求我支持随机网址,就好像它们是对主页的请求一样。某些网址中包含生成错误的字符“从客户端检测到潜在危险的Request.Path值(&)”。该站点使用ASP.Net MVC 3(在C#中)编写,并在IIS 7.5上运行。

这是一个示例网址...

http://mywebsite.com/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>

我还在应该捕获网址的操作中添加了ValidateInput属性...

public class WebsiteController : Controller
{
    [ValidateInput(false)]
    public ActionResult Home()
    {
        return View();
    }
}

但我仍然得到错误。有什么想法吗?我错过了什么?现在我只是在我的本地开发服务器上运行(我还没有在生产中尝试过这些修复)。

5 个答案:

答案 0 :(得分:160)

虽然您可以在配置文件中尝试这些设置

<system.web>
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>

我会避免使用像'&amp;'这样的字符在URL路径中用下划线替换它们。

答案 1 :(得分:5)

我遇到过这种错误。 从剃刀调用一个函数。

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
        );

答案 2 :(得分:1)

如果你想只允许在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();
}

答案 3 :(得分:0)

当我们试图弄清楚为什么我们的Silverlight ArcGIS地图查看器没有加载地图时,我们在Fiddler中遇到了同样的错误。 在我们的例子中,它是代码中URL的拼写错误。由于某种原因,那里有一个相同的标志 HTTP:// = someurltosome /真棒/地方
而不是 http://someurltosome/awesome/place

取出相同的标志后,它当然很有效。

答案 4 :(得分:0)

检查web.config文件中是否存在以下行

<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>