【问题标题】:MVC5 server-side redirect using filterContext使用 filterContext 的 MVC5 服务器端重定向
【发布时间】:2018-05-22 09:08:06
【问题描述】:

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

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

目前在我的HttpModule 中,我使用HttpContext.RewritePath 来实现服务器端重定向。我的问题是如何在ActionFilter 中获得相同的结果。

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

目前,我正在使用ActionExecutingContext

filterContext.Result = new RedirectResult(url)

这会导致 301 客户端。

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

【问题讨论】:

  • 只需为您的操作设置正确的路由,您就可以了。不需要 IIS 模块或操作过滤器。
  • 服务器重定向在 MVC 中似乎很重要,但可以做到:stackoverflow.com/q/799511/728795。但是@haim770 是对的——你也可以通过路由来解决这个问题
  • @alex 301 客户端重定向是什么意思?,它发生在服务器端。
  • @haim770 我不确定“正确路由”是什么意思。重写所有路线不是一种选择,因为我们正在谈论一个中型到大型应用程序。 url redirects 是向后兼容所必需的,而且旧网址非常易于阅读,这对营销来说是一个加分项。
  • @Adrian 是的,它发生在服务器上。但是,301 响应包含重定向的位置。然后客户端对所需的 Url 执行另一个请求。我已经看到这被称为客户端重定向。不确定它在语义上是否完全正确。

标签: asp.net-mvc redirect


【解决方案1】:

按照@Andrei 的建议,我在这里找到了我的问题的解决方案。这一行就足够了:

filterContext.HttpContext.Server.TransferRequest(url);

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

【讨论】:

    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多