如何使ActionResult无法通过URL访问,但需要从ajax调用
本文关键字:调用 ajax 访问 URL ActionResult 何使 | 更新日期: 2023-09-27 18:30:03
Grettings好友。所以我已经研究这个网站很长时间了,我还没有得到一个满意的答案。
这是我的控制器:
public ActionResult EliminarLibro(string bookId)
{
bookModel ModeloLibro = new bookModel();
ModeloLibro.EliminarLibro(bookId);
TempData["message"] = "Se ha eliminado el libro correctamente.";
return RedirectToAction("GestionBiblioteca");
}
这是我的Ajax视图:
var myBookId = $('.parrafo-codigo').text();
$.ajax({
type: "GET",
url: "/Home/VerificarEliminarLibro",
data: { bookId: myBookId },
datatype: "json",
success: function (data) {
// $('#result').html(data);
if (data.esteLibroEstaPrestado == true) {
$('#delModal').modal('hide'); // Quito modal de pregunta si se elimina
$('#errModal').modal('show'); // Muestra modal de error
} else {
window.location.href = '/Home/EliminarLibro/' + myBookId;
}
}
});
问题是:如何使ActionResult EliminarLibro无法通过URL访问(例如XXXX/Home/EliminarLibro/0000532307),但需要从ajax调用?
完成!感谢Amr ElGarhy:
public class AjaxOnlyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new HttpNotFoundResult();
}
}
}
控制器:
[AjaxOnly]
public JsonResult VerificarEliminarLibro(string bookId)
{
bookModel ModeloLibro = new bookModel();
bool HayLibrosPrestados = ModeloLibro.VerificarLibroPrestado(bookId);
if (HayLibrosPrestados == true)
{
return Json(new { esteLibroEstaPrestado = true }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { esteLibroEstaPrestado = false }, JsonRequestBehavior.AllowGet);
}
}
if (Request.AjaxRequest())
{
// The Code
}
else
throw new HttpException(404, "");