C# Blazor相当于OnActionExecuting?

C# Blazor相当于OnActionExecuting?,c#,blazor,blazor-server-side,.net-core-3.0,C#,Blazor,Blazor Server Side,.net Core 3.0,在我的MVC控制器中,我会重载OnActionExecuting方法来检查安全权限的可访问性。当路由到没有控制器的razor页面时,Blazor服务器端中是否有类似的行为 public override void OnActionExecuting(ActionExecutingContext context) { if (!context.IsAuthorized(out string message)) context.Result = StatusCode((int

在我的MVC控制器中,我会重载
OnActionExecuting
方法来检查安全权限的可访问性。当路由到没有控制器的razor页面时,Blazor服务器端中是否有类似的行为

public override void OnActionExecuting(ActionExecutingContext context)
{
    if (!context.IsAuthorized(out string message))
        context.Result = StatusCode((int)HttpStatusCode.Unauthorized, 
message);
    base.OnActionExecuting(context);
}

虽然我不确定这是否是解决这个问题的最佳方法,(我很想知道是否是),但我已经找到了一个解决办法,希望这也能帮助其他人

我截取了
路由器的
查找
方法,如下所示:

@inject IUserContext User

<Router AppAssembly="typeof(Program).Assembly">
    <Found Context="routeData">
        @if (routeData.IsAuthorizedFor(User, out string message))
        {
            <RouteView RouteData="@routeData" DefaultLayout="typeof(MainLayout)" />
        }
        else
        {
            <LayoutView Layout="typeof(MainLayout)">
                <p>@message</p>
            </LayoutView>
        }
    </Found>
    <NotFound>
        <LayoutView Layout="typeof(MainLayout)">
            <p>Sorry, there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
</Router>
@injectiusercontext用户
@if(routeData.IsAuthorizedFor(用户,输出字符串消息))
{
}
其他的
{
@信息

} 对不起,这个地址什么也没有


我不认为这是最佳的原因是,这似乎不是应该放在razor文件中的代码类型。<代码>路由器方法也不是虚拟的,因为我确实考虑创建我自己的路由器类型,从那个继承。

< P>这在Brasor .NET 5中从基类(即.cs文件,而不是.Rasor文件。我没有从.Rasor文件中尝试)起作用。


其他类似方法:OnAfterRender、OnParametersSet。请参阅

>“我将重载OnActionExecuting方法以检查安全权限”-这就是授权筛选器的用途。是否有一个与之等效的方法可以添加到我的razor页面中?
using Microsoft.AspNetCore.Components;

namespace YourProjectName.Pages
{
    public class YourRazorFileName: ComponentBase
    {
        protected override void OnInitialized()
        {
            base.OnInitialized();
           //Insert things you want to run on initialize here
        }
    }
}