有没有人让我知道为什么在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核心中是否有内置函数
答案 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请求,另一个用于标准整页重新加载。