Razor Pages w .NET 5 - 3 pytania i odpowiedzi ze szkolenia (październik 2021)

Seria pytań uczestników, które pojawiły się podczas szkolenia Razor Pages w .NET 5 realizowanego w dniach 18-22.10.2021 r.


Autoryzacja za pomocą AD w przypadku korzystania z konteneryzacji Docker

Linux nie obsługuje bezpośrednio autentykacji windows authentication. Zamiast tego trzeba użyć kerberos.



public void ConfigureServices(IServiceCollection services)
 {

         services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
              .AddNegotiate();
}
 

Do użycia kerberos należy zainstalować klienta kerberosa w konterze dockera. Z kolei kontener dockera musi być zarejestrowany w DNS server.

Polecam lekturę:

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-3.0&tabs=visual-studio#kestrel

W jaki sposób wyświetlić własny opis enum na liście?

1. W typie wyliczeniowym należy dodać atrybut Display


public enum Gender
{
    [Display(Name = "Mężczyzna")]
    Male,

    [Display(Name = "Kobieta")]
    Female
}
 

Uwaga: nie pomylić z innym podobnym atrybutem Description bo nie będzie działać.

Następnie możemy użyć metody Html.DisplayFor()


 @Html.DisplayFor(c => customer.Gender)
Istnieje również możliwość stworzenia własnego pomocnika znaczników (Tag Helper)
 

Tworzymy klasę



[HtmlTargetElement("td", Attributes = ForAttributeName)]
public class DisplayForTagHelper : TagHelper
{
    private const string ForAttributeName = "asp-display-for";

    [HtmlAttributeName(ForAttributeName)]
    public ModelExpression For { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        if (output == null)
        {
            throw new ArgumentNullException(nameof(output));
        }

        var text = For.ModelExplorer.GetSimpleDisplayText();

        output.Content.SetContent(text);
    }
}
 

Dodajemy do pliku _ViewImports.cshtml
@using WebApp
@namespace WebApp.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *,WebApp
Teraz możemy użyć własnego znacznika:



<td asp-display-for="@customer.Gender"></td>

 

W jaki sposób wyświetlić powiadomienie (Toast)?

Polecam bibliotekę ToastNotification

Instalujemy bibliotekę
Install-Package AspNetCoreHero.ToastNotification
Rejestrujemy


 public void ConfigureServices(IServiceCollection services)
 {
     services.AddNotyf(options =>
        {
            options.DurationInSeconds = 5;
            options.IsDismissable = true;
            options.Position = NotyfPosition.BottomRight;
        });
}
 

Dodajemy do konfiguracji



public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   app.UseNotyf();
}

 

Wyświetlamy komunikat


 public void OnPost([FromServices] INotyfService notyfService)
{          
    notyfService.Success("Klient został dodany.");