c# - 在不更改 url 的情况下显示自定义页面

我想在用户尝试访问他们不应该访问的内容时显示一个页面。此限制是检查自定义中间件。当中间件返回 false 并调用新 Controller 时,我不希望更改客户端 url。

这是我的中间件检查:

public async Task Invoke(HttpContext context, IAutorisationService service)
        {
            var user = service.CreateUserModel(context);
            var page = service.CreatePageModel(context);
            context.Items.Add("CurrentUser", user);

            if (service.UserAllowedToPage(user, page))
                await _next.Invoke(context);
            else
            {
                context.Response.Redirect("/Error/CustomError");
            }
        }

这是错误 Controller :

public IActionResult CustomError()
        {
            if (!HttpContext.Items.TryGetValue("CurrentUser", out var o) || !(o is UserModel userModel))
            {
                return View();
            }

            if (userModel.IsSuperUser)
            {
                return View();
            }

这里返回的 View 都工作正常。

这是我的 startup.cs(我现在正在努力的地方):

app.UseMvc(routes =>
            {
                //routes.MapRoute(
                    //name: "ErrorRoute",
                    //template: "{controller=Error}",
                    //defaults: new {controller = "Error", action = "CustomError"});

                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");

            });

我似乎无法正确使用我在网上找到的任何组合。

更新

好的,所以我不会进一步了解这些政策。 我会尝试更好地解释我的情况: 我在管道末端有一个自定义中间件(就在 app.UseMvc 之前) 该中间件有一个调用不同类中的 bool 运算符的异步任务调用方法。 现在,如果 bool 值返回 true,中间件任务将执行:await _next.Invoke(HttpContext) 如果该 bool 值返回 false,我希望中间件执行异常。 当异常被抛出时,我想要: 捕获它并激活 ErrorController 中的 CustomError 操作,然后返回自定义 View 。这可能吗? (抱歉,如果我的第一个问题不完整)

最佳答案

您好,您可以使用

返回错误 View
return View("Error")

你可以检查你需要的东西,如果有问题而不是主视图,你可以返回错误 View

https://stackoverflow.com/questions/56832854/

相关文章:

javascript - 如何在javascript中将文件移动到drive api v3中的垃圾桶

angular - Uncaught TypeError : ace. acequire 不是函数

ruby - Jekyll:尽管安装了最新版本,但命令未发现问题

python - 如何使用 python 在我的 github 帐户上创建远程 git 存储库或使用

javascript - 让 WebStorm 识别 jest.setupFilesAfterEnv

javascript - 如何将组添加到 buefy b-taginput?

android-studio - 安卓工作室 : Cannot get DialogFragment

python - 在 zipapp 存档中嵌入 numpy

c# - Asp.net core Identity登录成功重定向回登录页面

sql - 如何在 AWS Athena 中编写多个 SQL 语句,如 CREATE 表(使用 CL