Отправка Json с данными с частичным просмотром - PullRequest
0 голосов
/ 01 июня 2018

У меня есть следующий код chtml для действия в контроллере.Данные отправляются AJAX на действие.Часть chtml:

<li>
    <button id="abandon-popup" onclick="Transfer(@Model.Id)">
       Transfer <i class="icon-arrow-right"></i>
    </button>
</li>

Функция Transfer:

function Transfer(modelId) {
    //alert(modelId);
    $.ajax({

        type: "GET",
        url: "/Internet/Transfer",
        data: "id=" + modelId,
        success: function (responsedata) {
            alert("ok");
            window.location.href = responsedata.newUrl;
        },
        error: function (data) {
          console.log("KO");
        }
    })
}

Действие в контроллере:

public ActionResult Transfer(long id)
{
  *some actions*
  return Json(new { newUrl = PartialView("~/Views/Shared/Partials/Leads/_TransferPopup.cshtml", commonModel) });
}

Однако я получаю внутреннюю ошибку 500 наthis:

Этот запрос был заблокирован, поскольку конфиденциальная информация может быть раскрыта сторонним веб-сайтам, когда она используется в запросе GET.Чтобы разрешить запросы GET, установите для JsonRequestBehavior значение AllowGet

Есть идеи, как это исправить?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Используйте это

  return Json(new { newUrl = PartialView("~/Views/Shared/Partials/Leads/_TransferPopup.cshtml",
                             commonModel
                 )}, JsonRequestBehavior.AllowGet);

По умолчанию платформа ASP.NET MVC не позволяет вам отвечать на запрос HTTP GET с полезной нагрузкой JSON.Если вам нужно отправить JSON в ответ на GET, вам нужно явно разрешить поведение, используя JsonRequestBehavior.AllowGet в качестве второго параметра метода Json.Однако существует вероятность, что злоумышленник может получить доступ к полезной нагрузке JSON с помощью процесса, известного как JSON Hijacking.Вы не хотите возвращать конфиденциальную информацию, используя JSON в запросе GET.

0 голосов
/ 01 июня 2018

Попробуйте следующее:

return Json(new { newUrl = PartialView("~/Views/Shared/Partials/Leads/_TransferPopup.cshtml", commonModel) });

в

return Json(new { newUrl = PartialView("~/Views/Shared/Partials/Leads/_TransferPopup.cshtml", commonModel) }, JsonRequestBehavior.AllowGet);

Измените метод GET на метод POST следующим образом:

На стороне клиента:

function Transfer(modelId) {
//alert(modelId);
$.ajax({

    type: "POST",
    url: "/Internet/Transfer",
    data: {id: modelId},
    success: function (responsedata) {
        alert("ok");
        window.location.href = responsedata.newUrl;
    },
    error: function (data) {
      console.log("KO");
    }
})
}

Сторона контроллера:

[HttpPost]
public ActionResult Transfer(long id)
{
  *some actions*
  return Json(new { newUrl = PartialView("~/Views/Shared/Partials/Leads/_TransferPopup.cshtml", commonModel) });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...