【问题标题】:How to make ActionResult inaccessible via URL but is need to be called from ajax?如何使 ActionResult 无法通过 URL 访问但需要从 ajax 调用?
【发布时间】:2014-11-11 14:01:10
【问题描述】:

问候朋友。所以我一直在研究这个网站很长时间,但我的问题没有得到满意的答案。

这是我的控制器:

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 调用?

【问题讨论】:

标签: c# ajax asp.net-mvc-5


【解决方案1】:

完成! 感谢 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);
        }

    }

【讨论】:

    【解决方案2】:
    if (Request.AjaxRequest())
    {
        // The Code
    }
    else
        throw new HttpException(404, "");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多