C# 是否可以更改AccessDeniedPath上的查询字符串参数?
在ASP.NET Core 3.1 web应用程序中,我可以在我的C# 是否可以更改AccessDeniedPath上的查询字符串参数?,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,在ASP.NET Core 3.1 web应用程序中,我可以在我的Startup.cs中更改未经授权请求的目标路由,如下所示: services.ConfigureApplicationCookie(o => { o.AccessDeniedPath = "/Home/Error"; }); 这将返回/Home/Error?ReturnUrl=…其中…是我试图访问的任何页面 但实际上我只想让它简单地返回“/Home/Error?code=401” 我试过了 o
Startup.cs
中更改未经授权请求的目标路由,如下所示:
services.ConfigureApplicationCookie(o =>
{
o.AccessDeniedPath = "/Home/Error";
});
这将返回/Home/Error?ReturnUrl=…
其中…
是我试图访问的任何页面
但实际上我只想让它简单地返回“/Home/Error?code=401”
我试过了
o.AccessDeniedPath = "/Home/Error?code=401"
但这只会带来简单的回报
"/Home/Error?code=401?ReturnUrl=%2FAdmin"
然后我意识到选项中有一个ReturnUrlParameter
,如下所示:
o.ReturnUrlParameter = "code";
o.AccessDeniedPath = "/Home/Error";
这让我在重定向中走了这么远:
/Home/Error?code=%2FAdmin
但是我想指定keyvalue(例如401),即替换请求来自的页面,因此最终结果将是
/Home/Error?code=401
根据您的代码,您似乎正在使用cookie身份验证,我建议您可以尝试使用更改重定向URL,检查以下示例代码:
services.AddAuthentication("CookieAuthentication")
.AddCookie("CookieAuthentication", config =>
{
config.Cookie.Name = "UserLoginCookie"; // Name of cookie
config.LoginPath = "/Login/UserLogin"; // Path for the redirect to user login page
config.AccessDeniedPath = "/Login/UserAccessDenied";
config.Events = new Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationEvents()
{
OnRedirectToAccessDenied = ctx =>
{
var redirectPath = ctx.RedirectUri;
if (redirectPath.Contains("?ReturnUrl"))
{
//remove the ReturnURL
var url = redirectPath.Substring(0, redirectPath.LastIndexOf("?ReturnUrl"));
ctx.Response.Redirect(url + "?code=401");
}
// Or, directly using the following code:
//ctx.Response.Redirect("/Login/UserAccessDenied?code=401");
return Task.CompletedTask;
}
};
});
输出如下所示:
o.ReturnUrlParameter = "code";
o.AccessDeniedPath = "/Home/Error";
服务器上的角色可能有问题:@jdweng与我想要实现的目标无关。我的授权工作正常,我只想在用户未经授权时更改它重定向到的页面。该链接也适用于ASP.NET 3.5,而我使用的是ASP.NET Core 3.1,这似乎是一种默认行为,它的存在是有原因的。也许,若您不在服务器上使用它,就忽略它。如果您仍然希望删除它,可以尝试类似或的操作。可能这在没有自定义身份验证实现的情况下是无法实现的。实际上,我有一个自定义的身份验证例程正在运行,但我刚刚意识到我基本上可以检查
ReturnUrl
在我的Home/Error
请求中是否为空,并在那里执行我需要的操作,因此现在不再需要更改它了。我正在根据我的应用程序设置使用Windows身份验证(我猜它使用cookies?),我没有在启动时添加任何其他身份验证,我只是在控制器上使用自定义的[Authorize]属性,但这将起作用,因为我仍在使用服务。配置应用程序okie
行