[英]Redirect to specific URL if cookie exists
如果Cookie存在,我目前正在尝试转到特定的URL。
例如
/ANYCONTROLLER/ANYMETHOD to /CONTROLLER2/METHOD2
目前,我的身份验证Cookie的配置如下:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "AmcClientCookie",
AutomaticAuthenticate = true,
AutomaticChallenge = true,
LoginPath = new Microsoft.AspNetCore.Http.PathString("/Public/Home"),
CookieSecure = hostingEnvironment.IsDevelopment()
? CookieSecurePolicy.SameAsRequest
: CookieSecurePolicy.Always,
ExpireTimeSpan = TimeSpan.FromDays(1)
});
我试图在自定义授权处理程序中执行此操作,但是无法访问HttpContext 。
因此,我尝试在操作筛选器中执行此操作,但似乎无法访问身份验证以了解或是否已连接用户。
如果有人有想法。
可能还有其他方法,但是中间件似乎最适合此方法( 更多信息 )。
简短的方法 :
在您的startup.cs
类的Configure
方法中, 在 app.UseMvc(...)
调用之后,添加以下内容:
app.Use((context, next) =>
{
if (context.User.Identity.IsAuthenticated)
{
var route = context.GetRouteData();
if (route.Values["controller"].ToString() == "ANYCONTROLLER" &&
route.Values["action"].ToString() == "ANYMETHOD")
{
context.Response.Redirect("/CONTROLLER2/METHOD2");
}
}
return next();
});
长方法 :
使用以下命令创建一个名为UrlRewriteMiddleware.cs的类:
public class UrlRewriteMiddleware
{
private readonly RequestDelegate _next;
public UrlRewriteMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
if (context.User.Identity.IsAuthenticated)
{
var route = context.GetRouteData();
if (route.Values["controller"].ToString() == "ANYCONTROLLER" &&
route.Values["action"].ToString() == "ANYMETHOD")
{
context.Response.Redirect("/CONTROLLER2/METHOD2");
}
}
await _next.Invoke(context);
}
}
使用以下命令创建另一个名为MiddlewareExtensions.cs的类:
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseUrlRewriteMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<UrlRewriteMiddleware>();
}
}
在您的startup.cs
类的Configure
方法中, 在 app.UseMvc(...)
调用之后,添加以下内容:
app.UseUrlRewriteMiddleware();
您也可以使用
context.Request.Path = "/CONTROLLER2/METHOD2";
而不是重定向,但浏览器网址不会反映新路径,而是显示第一个路径。 如果应该显示错误消息或拒绝消息,则Path可能更合适。
我假设您正在使用asp.net身份验证通道,因此可以像示例中一样测试身份验证。 如果没有,您可以访问
context.Request.Cookies
快速笔记(阅读评论)
在设置Mvc路由之前, GetRouteData
返回null。 因此,您必须在设置Mvc路由后注册此中间件。
如果出于任何原因必须早些做,则可以通过request.Request.Path
访问该URL并手动对其进行解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.