c# - 如何在多个 Razor 页面之间共享处理程序方法?
问题描述
我正在使用 ASP.NET Razor 页面构建应用程序。
我已经使用 .NET Identity 实现了注册和登录。在我的 _Layout 局部视图中,我检查是否User.Identity.IsAuthenticated
. 如果不正确,则会显示指向注册和登录页面的超链接。
现在,如果User.Identity.IsAuthentiated
是真的,我想显示一个用于注销的超链接。但是,这个不需要单独的 Razor 页面。我只是想注销并重定向到 Index。我考虑过使用处理程序方法,例如:
public async Task<IActionResult> OnPostLogoutAsync()
{
await signInManager.SignOutAsync();
return RedirectToPage("/Index");
}
我是否可以从每个 Razor 页面访问它?或者有没有其他方法可以解决我的问题?
我想到的其他事情:
将其实现为 PageModel 的扩展方法。然而,对我来说,这个解决方案似乎很笨拙和欺骗。默认情况下,我需要注入
SignInManager<>
每个 Razor 页面,我觉得这是错误的。创建 MVC 控制器。一个可行的简单解决方案。但是,我想知道是否可以使用普通的 Razor Pages 来做到这一点。
将模型添加到 _Layout 局部视图。但是,对我来说,可以访问
RedirectToPage
模型需要从PageModel
. 在这种情况下,我会收到错误。因此,如果我不继承,PageModel
我需要找到另一种重定向到另一个 Razor 页面的方法,这使得这类似于第 2 点,但有额外的步骤和更笨拙。
解决方案
要在多个Razor页面之间共享一个handler方法,我想你可以把这个方法放在 中_layout.cshtml.cs
,其他的razor页面需要引用_layout.cshtml
。
我找到了一篇和你需求类似的文章,你可以参考一下。
推荐阅读
- string - PyMongo 在具有许多字段的大型集合中取消设置空字符串字段
- r - 如何在 R 中绘制正向/反向传播权重的轨迹图
- node.js - Webpack:将 webpack.config.js 移动到文件夹会破坏 webpack
- r - 使用 tidymodels 的 SMOTE 和虚拟变量作为分类变量
- python - 无法识别的 PYODBC 编程错误消息
- react-native - React Native Sound 错误:RNSound.play 的参数 1 (RCTResponseSenderBlock) 不能为空
- java - 如何在java中将十六进制字符串转换为公钥?(java.security.InvalidKeyException)
- python - 无法为 Selenium 运行 Django 单元测试
- gtk3 - Gobject 的函数 G_TYPE_INSTANCE_GET_PRIVATE 已弃用
- r - 如何将第二个数据框中的一列的值附加到第一个数据框中的列,并在 R 中匹配列名?