3 回答

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
我已經(jīng)通過(guò)使用檢查 Referer 標(biāo)頭的 Attribute 和 IPageFilter 解決了這個(gè)問(wèn)題。
首先我創(chuàng)建了屬性
[AttributeUsage(AttributeTargets.Method)]
public class ChildHandlerAttribute : Attribute
{
}
然后我GetOnSuccess()用它裝飾了處理程序
[ChildHandler]
public void OnGetSuccess()
{
}
然后我實(shí)現(xiàn)了檢查子處理程序的 Referer 標(biāo)頭的過(guò)濾器。
public class ChildHandlerAsyncPageFilter : IAsyncPageFilter
{
public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
var pageHandlerExecutedContext = await next();
if (pageHandlerExecutedContext.HandlerMethod?.MethodInfo.GetCustomAttribute<ChildHandlerAttribute>() == null)
{
return;
}
var referrer = context.HttpContext.Request.Headers["Referer"].ToString();
var request = pageHandlerExecutedContext.HttpContext.Request;
if (!referrer.StartsWith($"{request.Scheme}://{request.Host}"))
{
pageHandlerExecutedContext.Result = new NotFoundResult();
}
}
public Task OnPageHandlerSelectionAsync(PageHandlerSelectedContext context) => Task.CompletedTask;
}
最后,我將過(guò)濾器添加到Startup.cs中的管道中
services.AddMvc(options =>
{
options.Filters.Add<ChildHandlerAsyncPageFilter>();
});

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
請(qǐng)回答這個(gè)問(wèn)題,了解它如何成為可能。
不確定我是否建議走那條路,因?yàn)樗悬c(diǎn)臟而且是一個(gè)不必要的復(fù)雜解決方案。您可以為登錄/注銷(xiāo)用戶(hù)返回不同的狀態(tài)消息。
注銷(xiāo).cshtml.cs
public class LogoutModel : CustomPageModel
{
private readonly SignInManager _signInManager;
public LogoutModel(SignInManager signInManager) => _signInManager = signInManager;
public string StatusMessage { get; set; }
public async Task<IActionResult> OnGetAsync()
{
if (_signInManager.IsSignedIn(User))
{
await _signInManager.SignOutAsync();
StatusMessage = "Successfully logged out!";
return Page();
}
else {
StatusMessage = "Already logged out!";
return Page();
}
}
}
注銷(xiāo).cshtml
@page
@model X.LogoutModel
@Model.StatusMessage
- 3 回答
- 0 關(guān)注
- 108 瀏覽
添加回答
舉報(bào)