2013-02-18 4 views
0

Как сказано в заголовке, в моем приложении MVC3 я отправляю запрос POST на контроллер и получаю ошибку 400.Ошибка 400 (неудачный запрос) с помощью jQuery POST для приложения MVC3 в IIS 8

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

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

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

[HttpPost] 
public ActionResult GetContent(string id) 
{ 
    // Decrypt string to get filepath. 
    string file = EncryptStrings.DecryptAESString(id); 

    string content = String.Empty; 

    if(System.IO.File.Exists(file)) 
    { 
     content = System.IO.File.ReadAllText(file); 
    } 

    return Content(content); 
} 

Мой JQuery код:

function setContent(id) { 
    $.post('@Url.Action("GetContent", "Content")/' + id, null, 
     function (data) { 
      $('#article').html(data); 
      bringToFront('article-container'); 
    }, 'text'); 
} 

И пример того, что запрос выглядит (я увеличил maxUrlLength, чтобы для длинных запросов):

http://localhost/KBLite/Content/GetContent/545E55A34A5B6EE892286D481D177C149A003AAA0F44FAAD432970A9BADA5B79713344D2D80580DCA3345D520742E358A2089BF2E01EA553203AFCA27C96B4150923D33EC57D93F55241F9398D217E3B38609449CB64DCD2D2C31C850E5EBB452CC5A8F3B2F71D0B30E282D16F394FDC60696C3661372B1D200AE1B45371473DD7DC077BEAE475CD7D498F0AEDD63727 

Любые мысли?

+0

У вас есть специальные маршруты? –

+0

@achillesminor - Пожалуйста, см. Мое редактирование на мой ответ. –

ответ

2

В соответствии с «Understanding 400 Bad Request Exception»:

любого отдельного сегмента пути (в части URL, который не включать в себя протокол, имя сервера и строку запроса, например, http://a.com/b/c?d=e, здесь б и c - индивидуальный путь) не должно содержит более 260 символов. Также http.sys запрещает URL-адреса, что имеют более 255 сегментов пути.

Я считаю, что ваш идентификатор интерпретируется как сегмент пути, и в результате возникает этот ответ 400. Заданный вами maxUrlLength предназначен только для общей длины URL-адреса, а не для его сегмента.

Редактировать: Для этого есть легкое исправление. Измените свой адрес на это:

http://localhost/KBLite/Content/GetContent?id=545E55A34A5B6EE892286D481D177C149A003AAA0F44FAAD432970A9BADA5B79713344D2D80580DCA3345D520742E358A2089BF2E01EA553203AFCA27C96B4150923D33EC57D93F55241F9398D217E3B38609449CB64DCD2D2C31C850E5EBB452CC5A8F3B2F71D0B30E282D16F394FDC60696C3661372B1D200AE1B45371473DD7DC077BEAE475CD7D498F0AEDD63727 

Обратите внимание на ?id=. Это изменит способ анализа вашего идентификатора внутри ASP.NET и не будет рассматриваться как сегмент пути.

+0

Отлично, обработал; большое спасибо вам, друг! – achillesminor