Ссылка на кнопку MatBlazor не анализируется маршрутизацией

Я использую MatBlazor для своего веб-сайта и реализовал аутентификацию Google с помощью этого замечательного блога: Аутентификация Google в серверном Blazor

Мне нужна кнопка входа (MatButton) в моем MatAppBar.

В исходном коде есть ссылка: <a class="ml-md-auto btn btn-primary" href="/Login" target="_top">Login</a>.
Эта ссылка работает. Меня перенаправляют на мой OnGetAsync из моего LoginModel. Но это не соответствует моему стилю пользовательского интерфейса.

Эта кнопка переходит на правую страницу, но мой OnGetAsync из моего LoginModel не срабатывает, и отображается только Sorry, there's nothing at this address. по умолчанию.
<MatButton Class="mat" Outlined="true" Icon="Google" Label="Inloggen" Link="/Login"></MatButton>

Я думаю, мне нужно настроить маршрутизацию, но не могу найти, как это сделать.

Обновление:
Мой Login.cshtml.cs:

[AllowAnonymous]
public class LoginModel : PageModel
{
    public IActionResult OnGetAsync(string returnUrl = null)
    {
        string provider = "Google";
        // Request a redirect to the external login provider.
        var authenticationProperties = new AuthenticationProperties
        {
            RedirectUri = Url.Page("./Login",
            pageHandler: "Callback",
            values: new { returnUrl }),
        };
        return new ChallengeResult(provider, authenticationProperties);
    }
}

Мой Startup.cs:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseCookiePolicy();
        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEmbeddedBlazorContent(typeof(MatBlazor.BaseMatComponent).Assembly);

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapBlazorHub();
            endpoints.MapFallbackToPage("/_Host");
        });
    }

person Paul Meems    schedule 27.11.2019    source источник


Ответы (2)


У меня была очень похожая проблема, и я использовал параметр Navigationmanager, указанный выше, но мне пришлось передать параметр ForceLoad как «true»

 void LoginClick()
            {
                navigationManager.NavigateTo("/login",true);
            }
person RGolf77    schedule 11.04.2020
comment
Благодаря добавлению ForceLoad parameter as "true" удалось. Я пометил ваш ответ как ответ. - person Paul Meems; 16.04.2020

Используйте полный URL

<MatButton Class="mat" Outlined="true" Icon="Google" Label="Inloggen"
 Link="BaseUrl/Login"></MatButton>

или с помощью диспетчера навигации для навигации по этой странице

@inject NavigationManager navigationmanager
    <MatButton Class="mat" Outlined="true" Icon="Google" Label="Inloggen" Onclick="@(()=>)"></MatButton>
    code{
void clic()
{
navigationmanager.Navigateto("/Login")
}
}
person novfal haq    schedule 28.11.2019
comment
Я попробовал оба, результат тот же: без входа. Я обновлю свой пост, указав свой код для входа. - person Paul Meems; 28.11.2019