如何在重定向到login.aspx后保留url中的参数

2024-03-25

我有以下路线:

{语言}/{控制器}.mvc/{动作}/{id}

一旦用户选择了语言,就会以路由值语言进行维护。

http://localhost:4000/de/Account.mvc/注册 http://localhost:4000/de/Account.mvc/Register

如果用户点击需要授权的页面,我会遇到问题。抢劫然后重定向到http://localhost:4000/Account.mvc/Login?ReturnUrl=%2fde%2fAccount.mvc%2fProfileData http://localhost:4000/Account.mvc/Login?ReturnUrl=%2fde%2fAccount.mvc%2fProfileData

登录页面在 web.config 中配置,并且不允许使用来自路由的参数。登录后页面正常(http://localhost:4000/de/Account.mvc/ProfileData http://localhost:4000/de/Account.mvc/ProfileData)但登录页面本身没有路由值语言。

我怎样才能解决这个问题?

EDIT

我使用了 Darin 的答案,但必须包含原始授权过滤器 (AuthorizeAttribute.cs) 中的所有代码。原因记录在该文件中。它处理未经授权的用户可能从缓存获取安全页面的情况。

这是代码中的注释:

            // ** IMPORTANT **
            // Since we're performing authorization at the action level, the authorization code runs
            // after the output caching module. In the worst case this could allow an authorized user
            // to cause the page to be cached, then an unauthorized user would later be served the
            // cached page. We work around this by telling proxies not to cache the sensitive page,
            // then we hook our custom authorization code into the caching mechanism so that we have
            // the final say on whether a page should be served from the cache.

表单身份验证的问题是您无法动态配置登录 URL。这正是 ASP.NET 团队设计框架的方式。有时会调用 FormsAuthentication.RedirectToLoginPage 方法,该方法将重定向到 web.config 中的硬编码 url。

我可以看到两种可能的解决方法:

  1. 不要将语言存储在 url 中,而是存储在 cookie 中
  2. 编写一个自定义 ActionFilter,如果用户未经过身份验证,它会重定向到动态构建的登录页面

以下是使用自定义属性的示例:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class RequiresAuthenticationAttribute : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        IPrincipal user = filterContext.HttpContext.User;
        if (!user.Identity.IsAuthenticated)
        {
            filterContext.Result = new RedirectResult("CALCULATE YOUR LOGIN URL HERE FROM ROUTES");
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在重定向到login.aspx后保留url中的参数 的相关文章

随机推荐

  • 线程的cpu使用率

    如何在c 中获取 net中线程的cpu使用率 Check 如何获取Windows上每个线程的CPU使用率 win32 https stackoverflow com questions 1393006 how to get the cpu
  • VBA for Word 中的查找/替换字符限制解决方法

    我有一个基本的 vbscript 可以在 microsoft word 中查找和替换 但是我无法超过一定数量的字符 我认为是 256 个 我想知道是否有人知道解决这个问题的方法 以下是我正在使用的脚本示例 Sub FixedReplacem
  • iOS5 UINavigationBar 显示提示时背景图像问题

    我正在使用 iOS 5 中的新外观代理来使用背景图像来设计 UINavigationBar 的样式 UINavigationBar appearance setBackgroundImage UIImage imageNamed ZSNav
  • 你能在NSView上设置根层的anchorPoint吗?

    是否可以修改anchorPoint根上的属性CALayer层支持的NSView 我有一个叫做myView似乎每次我设置anchorPoint 它会在下一个运行循环中被覆盖 我正在这样做 NSView myView myView alloc
  • Facebook 点赞:未捕获类型错误:对象 # 没有方法“提供”

    我最近添加了 facebook like 按钮 但以下代码在 chrome 中返回错误 Uncaught TypeError Object has no method provide div div
  • 如何将 Ilist 转换为 ArrayList?

    我可以投吗IList into ArrayList 如果是的话我该怎么办 IList alls RetrieveCourseStudents cf ArrayList a ArrayList alls 那是对的吗 有错误 无法转换类型的对象
  • 如何在文本输入中集中文本

    一个简短的问题 有没有办法在react native中集中文本Textinput 这是 jsx 中的标记
  • 如何使用 Node.js zlib 模块和选项?

    我需要使用 zlib 以极端压缩级别压缩 Node js 中的缓冲区 输出的标头应为 78 DA 除非我遗漏了什么 否则 Node js 文档并没有真正描述如何使用 zlib Deflate 类 它不接受任何参数 http nodejs o
  • wkhtmltopdf 段错误

    我正在尝试将 wkhtmltopdf 放到 virtualbox ed ubuntu 12 04 64 位服务器上 到目前为止还没有运气 存储库中的包想要运行 xserver 和静态版本 wkhtmltopdf google com tes
  • JavaScript - 平滑移动/调整大小

    如何在一段时间内实现对象的平滑调整大小或移动 我应该以小于像素的单位更改对象的位置吗 我目前正在使用 setTimeout 进行计时 是否有比 setTimeout 在一段时间内移动对象更有效的方法 使用 jQuery 怎么样 animat
  • 函数式语言中的多线程? (序言)

    当我的朋友在学校开始学习 Prolog 时 我嘲笑他学习了一门无用的语言 然而 他向我展示了一些我从来不知道可能发生的东西 我想知道这个技术从何而来 技术是这样的 permutation List isAMember X List dele
  • UITableViewCell 复选标记在点击时打开和关闭

    我正在处理表格视图 我希望能够点击每个单元格 点击时 它会在单元格上显示一个复选标记 现在我有一些代码可以实现此功能 checkmarks when tapped func tableView tableView UITableView d
  • FlutterFirebaseCorePlugin.java 使用或覆盖已弃用的 API

    好吧 我运行我的程序时没有导入 firebase core firebase auth 和 cloud firestore 我的代码运行得很好 但是我使用 firebase 注册了我的应用程序 它仍然运行得很好 但是一旦我导入Firebas
  • 在 NLTK 3.0 中使用 Wordnet 从 Synset 中提取单词

    前段时间 SO上有人问如何检索给定同义词集的单词列表 https stackoverflow com questions 24664250 how do i print out just the word itself in a wordn
  • 常量字符串将存储在内存中的哪里?

    有时我们在 C 编程中使用这种类型的代码 char p Sam 这里常量字符串 Sam 的地址将被存储在字符指针p中 现在在这里我想问一下 Sam 会存放在哪里 字符串 Sam 通常存储在与全局常量相同区域的全局内存中 但是 如果您这样做
  • 如何检查背景图像是否已加载?

    我想在 body 标签上设置背景图像 然后运行一些代码 像这样 body css background image http picture de image png load function alert Background image
  • 在 ASP.NET MVC 中解析 JSON 值时出错?

    我正在尝试使用 StackOverflow 的搜索 API 来搜索问题 我正在使用此操作来执行解析 public ActionResult StackExchange string sq string url http api stacko
  • 如何更改页脚 由 Drupal 及其链接提供支持?

    我正在 Drupal 上工作 我想知道如何更改由 Drupal 提供支持的页脚文本以及为其提供的链接 我想要 版权所有 2012 我的网站名称 保留所有权利 我无法得到它 任何人都可以帮助我 只需转到 结构 gt 块 gt 添加块 将块标题
  • 此构造函数不带参数 lcd

    这是我尝试显示湿度传感器数据的代码 到我的液晶显示器 当我运行这个程序时 回溯 最近一次调用最后一次 文件 lcd py 第 7 行 lcd CharLCD cols 16 rows 2 pin rs 37 pin e 35 pins da
  • 如何在重定向到login.aspx后保留url中的参数

    我有以下路线 语言 控制器 mvc 动作 id 一旦用户选择了语言 就会以路由值语言进行维护 http localhost 4000 de Account mvc 注册 http localhost 4000 de Account mvc