gpt4 book ai didi

javascript - ASP.NET MVC 3 将请求重定向到根页面

转载 作者:行者123 更新时间:2023-11-28 01:14:30 25 4
gpt4 key购买 nike

我目前正在开发一个只有 1 页的网站,但遇到了以下问题。

该网站有 5 个部分,我们希望为页面中的每个部分创建链接,而不使用 #/hash 链接。我们通过使用 PJAX 插件来解决这个问题。例如,如果用户单击“关于”链接,它将使用 PJAX 插件来更改 URL 并添加到推送状态......效果很好。然而,当我们直接访问 URL(例如/About)时,我们希望能够“捕获”此请求并将页面请求路由回主页(并使用 jquery 滚动到 About div)。由于实际的/About 页面没有内容,只是用作 PJAX 调用的虚拟页面。

谢谢。

最佳答案

发送 PJAX 请求时,始终应该在 HTTP 请求中包含此 header :

X-PJAX: true

您可以通过添加自定义 ActionMethodSelectorAttribute 来重定向不同的请求,该自定义 ActionMethodSelectorAttribute 会检查 X-PJAX header 是否存在。

将此自定义 Attribute 类添加到您的解决方案中:

public class AcceptHeaderAttribute : ActionMethodSelectorAttribute
{
public string HeaderName { get; set; }

public string HeaderValue { get; set; }

public AcceptHeaderAttribute(string headerName, string headerValue = null)
{
if (String.IsNullOrWhiteSpace(headerName))
throw new ArgumentNullException("headerName");

HeaderName = headerName;
HeaderValue = headerValue;
}

public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
if (controllerContext == null)
throw new ArgumentNullException("controllerContext");

var incomingHeader = controllerContext.HttpContext.Request.Headers[HeaderName];

var headerExists = String.IsNullOrWhiteSpace(incomingHeader);

// NOTE: can optionally change this to Contains, or add a parameter for that.
var valueCorrect = String.Equals(incomingHeader, HeaderValue, StringComparison.OrdinalIgnoreCase);

return (String.IsNullOrWhiteSpace(HeaderValue)
? headerExists
: valueCorrect);
}
}

然后,您可以为 PJAX 请求与直接用户请求设置不同的 Action:

[AcceptHeader("X-PJAX", "true")]
public ActionResult About(string myInput)
{
ViewBag.Test = "This is a PJAX request";

return View();
}

public ActionResult About()
{
ViewBag.Test = "This is a normal request";

return View();

// or redirect them to root page
return RedirectToAction("Index");
}
<小时/>

如果您只关心检查 HTTP 请求中是否存在 Header,而不关心该值是否正确,则可以将用法简化为:

[AcceptHeader("X-PJAX")]

关于javascript - ASP.NET MVC 3 将请求重定向到根页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com