% 20, сопровождаемый косой чертой, за которой следует больше данных, приводит к сбою маршрутизации ASP.NET MVC 3? - PullRequest
3 голосов
/ 31 января 2011

Когда символы% 20 появляются между параметрами в URL-адресе, моя маршрутизация MVC прекращается, если учесть, что это строка.

Почему так и как я могу подойти к обработке символов "% 20" в моем URL?

Пример URL

http://localhost:40494/ListContents/Delete/asdf%20/5430f394...

public ActionResult Delete(string DNSName, Guid id)
{...}

routes.MapRoute(
    "Delete", // Route name
    "ListContents/Delete/{DNSName}/{id}", // URL with parameters
     new { controller = "ListContents", action = "Delete" } // Parameter defaults
      );

Однако Оба следующих URL работают нормально

http://localhost:40494/ListContents/Delete/asdf%20SOMETHING_HERE/5430f394...

http://localhost:40494/ListContents/Delete/%20asdf/5430f394-946c-4f82-ac13-9d5efafe9127

Ответы [ 3 ]

3 голосов
/ 31 января 2011

Если в конце любого раздела URL-адреса перед следующей косой чертой находится пустое пространство, в методе System.Web.Util.FileUtil.CheckSuspiciousPhysicalPath(), который обрабатывается MVC, выдается HttpException, и вы получите ответ HTTP 404.

Вы можете проверить это самостоятельно, установив флажок для Throw в:

  1. Visual Studio
  2. Debug
  3. Exceptions
  4. Common Language Runtime Exceptions

Как правило, в ваших URL не должно быть пустых мест. Я лично форматирую свои URL, чтобы все пробелы становились тире (-).

0 голосов
/ 11 марта 2011

Убедитесь, что поле id таблицы не является строкой (nchar (x)). Если это так, проверьте, имеет ли соответствующий идентификатор точную длину, определенную в объявлении типа. Если нет (если у него меньше символов), это проблема (она должна иметь ТОЧНУЮ длину, которую вы объявили) Это сработало для меня.

0 голосов
/ 31 января 2011

Я думаю, что проблема в том, что в примере, где он не работает, он не может быть проанализирован как действительный URL, он будет читаться как

http://localhost:40494/ListContents/Delete/asdf /5430f394...

Вместо этого вы можете безопасно удалить %20 из этого URL.

...