使用filterContext的MVC5服务器端重定向

时间:2018-05-22 09:08:07

标签: asp.net-mvc redirect

我有一个包含url重定向的表,之前我使用HttpModule方法查询数据库并处理重定向(如果找到了这些重定向)。但是现在我想在ActionFilter中重新设计此功能有两个原因:

  1. HttpModule处理所有请求,而我只需要在某些类型的内容中重定向。在所有其他情况下,这会导致无意义的数据库查询。
  2. 我需要其他功能 - 在某些条件下使用 301客户端重定向,默认为服务器端重定向
  3. 目前在HttpModule我正在使用HttpContext.RewritePath来实施服务器端重定向。我的问题是如何在ActionFilter中获得相同的结果。

    澄清服务器端重定向:我希望能够从两个不同的链接访问相同的内容。如果将courses/programming-basics/details(口头网址)重定向到/course/{id}/details(实际路径),我希望能够使用该动词网址来访问此内容。

    目前,使用我正在使用的ActionExecutingContext

    filterContext.Result = new RedirectResult(url)
    

    导致 301客户端

    澄清:我希望通过旧网址访问我的内容。按照上面的示例,这将生成一个页面,其中包含两个有效网址的相同内容:courses/programming-basics/details和`course / {id} / details。也许我错误地使用重定向,但这就是我设法说出我的问题。

1 个答案:

答案 0 :(得分:0)

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

filterContext.HttpContext.Server.TransferRequest(url);

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