首页 > 解决方案 > 使用 filterContext 的 MVC5 服务器端重定向

问题描述

我有一个带有 url 重定向的表,以前我使用HttpModule方法来查询数据库并处理重定向,如果找到的话。但是现在我想重新设计这个功能ActionFilter有两个原因:

  1. HttpModule处理所有请求,而我只需要重定向某些类型的内容。在所有其他情况下,这会导致毫无意义的数据库查询。
  2. 我需要附加功能 - 在某些条件下使用301 客户端重定向,其余的默认使用服务器端重定向

目前HttpModule我正在使用HttpContext.RewritePath实现服务器端重定向。我的问题是如何在ActionFilter.

澄清服务器端重定向:我希望能够从两个不同的链接访问相同的内容。如果courses/programming-basics/details(verbal url)被重定向到/course/{id}/details(real action path),我希望能够使用verbal url来访问这个内容。

目前,使用ActionExecutingContext我正在使用

filterContext.Result = new RedirectResult(url)

这导致301 client-side

澄清:我希望通过旧网址访问我的内容。按照上面的示例,这会产生一个页面,该页面显示具有两个有效 url 的相同内容:courses/programming-basics/details和 `course/{id}/details。也许我错误地使用了重定向,但这就是我设法表达我的问题的方式。

标签: asp.net-mvcredirect

解决方案


正如@Andrei 所建议的,我在这里找到了我的问题的解决方案。这条线就足够了:

filterContext.HttpContext.Server.TransferRequest(url);

这返回了正确的内容并保留了旧的、详细的 url。正是我需要的。


推荐阅读