我想在用户尝试访问他们不应该访问的内容时显示一个页面。此限制是检查自定义中间件。当中间件返回 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 。这可能吗? (抱歉,如果我的第一个问题不完整)
最佳答案
您好,您可以使用
返回错误 Viewreturn 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