2015-11-24 2 views
1

Я не понимаю, почему мой код ниже работает нормально, когда метод установлен на «POST», но не тогда, когда он «GET». Бэкэнд-код отлично работает в обоих случаях, но в интерфейсе я заканчиваю в ошибке: обработчик, когда метод «GET», и только «POST» приводит меня в успех: обработчик.Ajax GET никогда не бывает успешным, но POST (тот же код)

Мой объект возврата из бэкэнд имеет набор AllowGet, и я не отправляю никаких параметров в метод. Почему я получаю 500 внутренних ошибок сервера?

// Front end 
$.ajax({ 
    cache: false, 
    url: '@Url.Action("GetBusinessList")', 
    method: 'GET', 
    dataType: 'json', 
    success: function (data) { 
     console.log(data); 
     // do some stuff 
    }, 
    error: function (xhr, status, text) { 
     console.log(xhr.status); // 500 
     console.log(xhr.text); // undefined 
     console.log(xhr.responseText); // my error page's html 
    } 
}); 
// The backend code 
public JsonResult GetBusinessList() 
{ 
    //... 

    JsonResult returnObj = new JsonResult 
    { 
     Data = new 
     { 
      MyList = businessList // this is a List<MyType> 
     }, 
     ContentEncoding = System.Text.Encoding.UTF8, 
     JsonRequestBehavior = JsonRequestBehavior.AllowGet 
    }; 

    return Json(returnObj); 

Просто повторить: Код Бэкенд выполняется успешно, когда метод установлен в «POST» и «GET». Код jquery, возможно, виноват, но я не знаю почему.

Имея [HttpGet], действие ничего не делает - на самом деле у меня есть свой собственный атрибут, чтобы проверить HttpContext.Request.IsAjaxRequest. Снятие и замена HttpGet не влияет.

+0

Прошли ли вы через код на сервере, чтобы узнать, что такое фактическая ошибка? –

+0

Почему имя действия отличается? 'GetBusinessList' v' GetBusinessSources'? – christiandev

+1

Отладка в VS (предположим, вы используете эту среду IDE?). Перейдите к debug> exceptions> Исключить проверку исключительных ситуаций в Common Language Rutime «throw». Повторите запрос и проверьте исключение, которое должно быть отправлено и выполнение остановлено. Мне интересно, если это проблема с маршрутизацией, и вы попадаете в исключение «несколько действий, найденных для запроса». –

ответ

3

По умолчанию asp.net mvc не разрешает HTTP-запрос GET с полезной нагрузкой JSON. Вам необходимо явно разрешить поведение, используя JsonRequestBehavior.AllowGet как второй параметр для метода Json, как описано ниже.

return Json(returnObj, JsonRequestBehavior.AllowGet); 
+0

@VictorySaber - вы должны попробовать это ... потому что JsonRequestBehavior по умолчанию является «DenyGet» .. поэтому указание его явно на «AllowGet» должно привести к правильному действию Get. – Nirman

+0

Итак, хотя returnObj имеет JsonRequestBehavior, установленный в AllowGet, мне нужно установить его в новом Json, который я создаю ..... ах, позвольте мне попробовать. – VictorySaber

+0

Конечно. Я возвращаю объект Json, который по умолчанию имеет набор DenyGet. Объект _inside_ Json не имеет значения. Я знал, что это будет что-то глупое. Благодаря!!! – VictorySaber

0

Вы пробовали добавлять HTTP Получить атрибут к контроллеру:

[HttpGet] 
public JsonResult GetBusinessList() 
{ 
    .... 
} 

Если открыть окно инструментов разработчика, сообщение об ошибке должно отображаться в окне консоли.

Вы также должны проверить URL-адрес, который вы вызываете, который отличается от вашего метода контроллера, в вашем описании вопроса.

+0

URL-адрес в порядке, моя ошибка при надевании SO. HttpGet не имеет значения. Бэкэнд отлично работает с POST и GET. – VictorySaber

2

Или вы можете просто вернуть returnObj вместо Json (returnObj). Это уже содержит требуемое поведение.

+0

Этот способ возвращения JSON работает отлично в другом месте моего сайта, где я делаю POST. Я попробую это, чтобы увидеть, делает ли это работу GET - можете ли вы объяснить, почему? – VictorySaber

+0

Да, вы были правы, я объяснил, почему на посту Азима. – VictorySaber

+1

@VictorySaber - попробуйте, это должно сработать и потому, что сам метод Json возвращает JsonResult, поэтому, если у вас уже есть это, просто верните его, он должен работать. – user1468313

Смежные вопросы