为什么在ASP.Net Core中不推荐使用IsAjaxRequest

时间:2017-08-08 05:09:25

标签: asp.net asp.net-core

有没有人让我知道为什么在ASP.Net Core中弃用了IsAjaxRequest 还是有其他替代功能。

我在项目中使用此功能现在我要升级到ASP.Net Core

        if (Request.IsAjaxRequest())
        {
            return PartialView("index2", VMJob);
        }
        return View(VMModel);

有一项解决方法:Where is Request.IsAjaxRequest() in Asp.Net Core MVC?

但我想知道ASP.Net核心中是否有内置函数

1 个答案:

答案 0 :(得分:0)

有一种方法可以限制您的操作方法仅响应ajax请求:

public class AjaxOnlyAttribute : ActionMethodSelectorAttribute
{
    public override bool IsValidForRequest(RouteContext routeContext, 
        ActionDescriptor action)
    {
        HttpRequest request = routeContext.HttpContext.Request;
        if (request == null)
        {
            return false;
        }

        if (request.Headers != null)
        {
            return request.Headers["X-Requested-With"] == "XMLHttpRequest";
        }

        return false;
    }
}

然后在你的控制器中:

[Route("api/[controller]")]
public class UsersController : Controller
{
    [HttpGet]
    [AjaxOnly]
    public IActionResult GetAll()
    {
        return Ok(new[]
        {
            new UserDto{Id = 1, Name = "John"},
            new UserDto{Id = 2, Name = "Snow"}
        });
    }

    private class UserDto
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

通过这种方式,您可以创建两个单独的操作方法,一个用于ajax请求,另一个用于标准整页重新加载。