специальные символы в URL дают неверный запрос или недопустимые символы в пути

Я использую javascript для запроса изображения, созданного сервером в режиме реального времени.

Параметр передается в URL-адресе, захватывается MVC и устанавливается в параметре «id» для контроллера. Как это:

Public Function Index(ByVal id As String) As ActionResult

Это отлично работает, если я не использую никаких специальных символов, таких как «?» или цитаты. Чтобы отправить их, мне нужно экранировать или закодировать этот контент, но как мне это сделать?

Я пробовал javascript escape или encodeURIComponent, но он либо дает мне "неверный запрос", либо "недопустимые символы в пути"

Пример URL-адреса будет http://localhost/Imagem/Index/Question%3F для "Вопрос?"

Это возвращает «Неверный запрос»


person ariel    schedule 06.09.2010    source источник


Ответы (3)


Вы можете найти эту запись в блоге. Как вы увидите, есть обходные пути, но используйте их на свой страх и риск. Добавьте это в свой web.config, если вы используете .NET 4.0:

<system.web>
    <httpRuntime 
        requestValidationMode="2.0"
        requestPathInvalidCharacters="&lt;,&gt;,*,%,:,&amp;,\"
        relaxedUrlToFileSystemMapping="true"
    />
    ...
</system.web>

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true" />
    </security>
    ...
</system.webServer>

Лично я бы рекомендовал вам избегать использования специальных символов в таких URL-адресах. Вы можете либо преобразовать их в какой-либо другой символ, используя функцию сопоставления, либо использовать их только в параметре строки запроса: http://localhost/Imagem/Index?id=Question%3F

person Darin Dimitrov    schedule 07.09.2010
comment
я использовал экранирование javascript, а затем преобразовал «%» во что-то еще, чтобы IIS/MVC не жаловался. Спасибо! - person ariel; 07.09.2010

Вы пытаетесь получить доступ к файлу изображения, созданному сервером во время выполнения.

В приведенном выше вопросе вы пытаетесь получить доступ к файлу изображения в качестве вопросов?

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

person swapneel    schedule 06.09.2010
comment
Это не файл, это изображение, содержащее Вопросы? написанные на нем, генерируются в реальном времени. - person ariel; 07.09.2010

Спасибо за ответы, но я обошел это, используя escape, а затем преобразовав символы % во что-то, что я позже в своем коде сервера изменю обратно на % и отключу себя.

В клиентском скрипте:

myImg.src = "../../Imagem/Index/" + escape(myValue).replace(/\%/g, "_-_");

В контроллере:

Public Function Index(ByVal id As String) As ActionResult
    id = id.Replace("_-_", "%")
    id = HttpUtility.UrlDecode(id, System.Text.Encoding.Default())
    Return New ImageResult(CreateImage(id))
End Function
person ariel    schedule 07.09.2010