3 回答

TA貢獻1998條經驗 獲得超6個贊
我已經通過使用檢查 Referer 標頭的 Attribute 和 IPageFilter 解決了這個問題。
首先我創建了屬性
[AttributeUsage(AttributeTargets.Method)]
public class ChildHandlerAttribute : Attribute
{
}
然后我GetOnSuccess()用它裝飾了處理程序
[ChildHandler]
public void OnGetSuccess()
{
}
然后我實現了檢查子處理程序的 Referer 標頭的過濾器。
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;
}
最后,我將過濾器添加到Startup.cs中的管道中
services.AddMvc(options =>
{
options.Filters.Add<ChildHandlerAsyncPageFilter>();
});

TA貢獻2019條經驗 獲得超9個贊
請回答這個問題,了解它如何成為可能。
不確定我是否建議走那條路,因為它有點臟而且是一個不必要的復雜解決方案。您可以為登錄/注銷用戶返回不同的狀態消息。
注銷.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();
}
}
}
注銷.cshtml
@page
@model X.LogoutModel
@Model.StatusMessage
- 3 回答
- 0 關注
- 101 瀏覽
添加回答
舉報