在 ASP.Net MVC3 中重定向到不影响 URL 的区域

Posted

技术标签:

【中文标题】在 ASP.Net MVC3 中重定向到不影响 URL 的区域【英文标题】:Redirect to an Area Without Affecting Url in ASP.Net MVC3 【发布时间】:2011-09-23 11:14:19 【问题描述】:

是否可以在初始重定向后不使用 301/302 重定向将 MVC3 请求重定向到区域路由?让我解释一下我想要什么,因为这听起来很复杂。

基本流程:

    请求:http://somedomain.com/?ContextId=00001 重定向 从区域 01 提供内容;控制器主页;行动指数 从 url 中删除了 ContextId 查询字符串条目

所以最终结果是在设置初始 ContextId 之后对http://somdomain.com 的所有请求都将使用该区域,直到指定新的 ContextId 为止。

我可以使用IHttpModule 来捕获查询字符串,然后在会话中为后续请求设置一些值,但是我需要发出RedirectToXXXX() 调用来进行重定向。这将生成一个包含该区域的 URL,然后我需要在将来识别此类“映射”请求以防止重定向循环。呜呜呜。

我查看了自定义路由约束,但路由在管道中发生得太早,以至于没有可用的会话,这使得很难“知道”约束所附加的路由是否是我想要的。尤其是在这个阶段我不希望该区域包含在请求 URL 中。

这可能吗?任何想法都将受到欢迎。

【问题讨论】:

可以在路由约束中使用 cookie 吗? 现在只是使用 cookie 进行测试。但不确定它是否适合我们的最终解决方案。感谢您的建议 - 将报告调查结果。 @tvanfosson 似乎 cookie 是可以接受的,并且它们在 RouteConstraint 中运行良好。由于路由图中缺少命名空间,因此对 URL 404ing 有一些小问题。谢谢。如果您想将其发布为答案,我会打勾:) 【参考方案1】:

您可以将上下文存储在 cookie 中,并使用 RouteConstraint 中的 cookie 值来强制匹配到正确的区域。

【讨论】:

以上是关于在 ASP.Net MVC3 中重定向到不影响 URL 的区域的主要内容,如果未能解决你的问题,请参考以下文章

防止在 asp.net core 2.2 中重定向到 /Account/Login

在 ASP.NET MVC 中重定向未经授权的控制器

如何在 ASP.NET MVC 中重定向到动态登录 URL

如何在 asp.net mvc 中重定向到正确的控制器操作

当用户在 asp.net mvc3 中未授权时重定向到另一个页面

当用户在 asp.net mvc3 中未授权时重定向到另一个页面