Получение "потенциально опасное значение Request.Path было обнаружено у клиента (&)"

У меня есть проблема с устаревшим кодом, которая требует, чтобы я поддерживал случайные URL-адреса, как если бы они были запросами для домашней страницы. Некоторые из URL-адресов содержат в них символы, которые генерируют ошибку "Потенциально опасное значение Request.Path было обнаружено у клиента (&)" . Сайт написан с ASP.Net MVC 3 (в С#) и работает на IIS 7.5.

Вот пример URL...

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 к действию, которое должно захватывать URL-адреса...

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

Но я все еще получаю ошибку. Любые идеи почему? Я что-то пропустил? Сейчас я просто работаю на своем локальном dev-сервере (я еще не пробовал эти исправления в процессе создания).

Ответ 1

Пока вы можете попробовать эти настройки в файле конфигурации

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

Я бы избегал использовать символы типа '&' в URL-пути, заменяя их символами подчеркивания.

Ответ 2

Я столкнулся с этим типом ошибок. для вызова функции из бритвы.

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" />

где my 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
        );

Ответ 3

Если вы хотите разрешать теги Html только для нескольких текстовых полей в mvc

Вы можете сделать одну вещь

в контроллере

 [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();
}

Ответ 4

Мы получили ту же ошибку в Fiddler, пытаясь понять, почему наш браузер Silverlight ArcGIS не загружал карту. В нашем случае это была опечатка в URL-адресе кода. По какой-то причине там был знак равенства.
Http://= someurltosome/удивительное/место
вместо http://someurltosome/awesome/place

После того, как вынул этот знак равенства, он отлично работал (конечно).

Ответ 5

Потенциально опасное значение Request.Path было обнаружено клиентом (&). Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Web.HttpException: потенциально опасное значение Request.Path было обнаружено от клиента (&).

Ошибка источника:

Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информация о происхождении и местонахождении исключения может быть идентифицирована с помощью трассировки стека исключений ниже.

Трассировки стека:

[HttpException (0x80004005): потенциально клиентское значение было обнаружено потенциально опасное значение Request.Path(&).] System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +9939856 System.Web.PipelineStepManager.ValidateHelper(HttpConxt)]

Ответ 6

Убедитесь, что в вашем файле web.config присутствуют следующие строки

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