2013-02-26 2 views
0

Как вы создаете функцию контроллера, которая возвращает ResponseRedirect, вместо этого возвращает ResponseRedirect как объект Json?ResponseRedirect as Json

Я хочу сделать что-то вроде этого

return Json(new { url = RedirectToAction("AccountMyProducts", "Account"), redirect = "true" }); 

Чтобы получить URL переадресации в моем JSONObject.

+0

Вы хотите, чтобы клиент перенаправлял или возвращал данные json? –

+0

Я хочу, чтобы клиент вернул URL-адрес из redirectAction – user473104

ответ

7

нравится этот

return Json(data, JsonRequestBehavior.AllowGet); 

объяснение: функция возвращает тип JsonResult, который наследуется ActionResult.

  1. JsonRequestBehavior.AllowGet:
    С этого Ответом why-is-jsonrequestbehavior-needed

Это для защиты от очень конкретной атаки с JSON запросов , которые возвращают данные, используя HTTP GET.

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

Тем не менее, MVC помещает его в DenyGet как по умолчанию, чтобы защитить вас от этой атаки. Это заставляет вас рассмотреть последствия данных, что вы разоблачение, прежде чем вы решите выставить его на HTTP GET

если вы планируете перенаправить на основе данных JSon

return Json(new  
{  
    redirectUrl = Url.Action("AccountMyProducts", "Account"),  
    isredirection= true  
}); 

в вызове успеха Jquery назад функция, не нравится эта

$.ajax({ 
.... //some other stuffs including url, type, content type. 

//then for success function. 
success: function(json) { 
    if (json.isredirection) { 
        window.location.href = json.redirectUrl; 
    } 
} 

}); 
+1

Он работает как шарм! – user473104

0

Вы можете попробовать это:

return Json(new { url = "Account/AccountMyProducts", redirect = "true" }); 

Следует отметить, что RedirectToAction(...) возвращает RedirectToRouteResult, который оценивается методом, который вызывает действие вашего контроллера, а не сразу возвращает фактический URL.