![]() |
|
ASP.NET Core and Blazor updates in .NET Core 3.0 Preview 9 - Printable Version +- Sick Gaming (https://sickgaming.net) +-- Forum: Programming (https://sickgaming.net/forum-76.html) +--- Forum: C#, Visual Basic & .NET (https://sickgaming.net/forum-79.html) +--- Thread: ASP.NET Core and Blazor updates in .NET Core 3.0 Preview 9 (/thread-91953.html) |
ASP.NET Core and Blazor updates in .NET Core 3.0 Preview 9 - xSicKxBot - 09-11-2019 ASP.NET Core and Blazor updates in .NET Core 3.0 Preview 9 Daniel September 4th, 2019 .NET Core 3.0 Preview 9 is now available and it contains a number of improvements and updates to ASP.NET Core and Blazor. Here’s the list of what’s new in this preview:
Please see the release notes for additional details and known issues. Get started To get started with ASP.NET Core in .NET Core 3.0 Preview 9 install the .NET Core 3.0 Preview 9 SDK. If you’re on Windows using Visual Studio, install the latest preview of Visual Studio 2019. .NET Core 3.0 Preview 9 requires Visual Studio 2019 16.3 Preview 3 or later. To install the latest Blazor WebAssembly template also run the following command: Code: dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.0.0-preview9.19424.4To upgrade an existing ASP.NET Core app to .NET Core 3.0 Preview 9, follow the migrations steps in the ASP.NET Core docs. Please also see the full list of breaking changes in ASP.NET Core 3.0. To upgrade an existing ASP.NET Core 3.0 Preview 8 project to Preview 9:
You should now be all set to use .NET Core 3.0 Preview 9! Blazor event handlers and data binding attributes moved to Microsoft.AspNetCore.Components.Web In this release we moved the set of bindings and event handlers available for HTML elements into the Microsoft.AspNetCore.Components.Web.dll assembly and into the Code: Microsoft.AspNetCore.Components.WebBlazor apps Open the application’s root _Imports.razor and add Code: @using Microsoft.AspNetCore.Components.WebBlazor libraries Add a package reference to the Microsoft.AspNetCore.Components.Web package package if you don’t already have one. Then open the root _Imports.razor file for the project (create the file if you don’t already have it) and add Code: @using Microsoft.AspNetCore.Components.WebTroubleshooting guidance With the correct references and using statement for Code: Microsoft.AspNetCore.Components.WebCode: @onclickCode: @bindIf Code: @bindCode: @onclickCode: @usingIf you’re missing a using statement for the Code: Microsoft.AspNetCore.Components.WebCode: @bindCode: CS0169 The field 'Index.text' is never used
CS0428 Cannot convert method group 'Submit' to non-delegate type 'object'. Did you intend to invoke the method?In other cases you may get a runtime exception and the app fails to render. For example, the following runtime exception seen in the browser console indicates that the Code: @onclickCode: Error: There was an error applying batch 2.
DOMException: Failed to execute 'setAttribute' on 'Element': '@onclick' is not a valid attribute name.Add a using statement for the Code: Microsoft.AspNetCore.Components.WebIf you add the Code: Microsoft.AspNetCore.Components.WebCode: CS0234 The type or namespace name 'Web' does not exist in the namespace 'Microsoft.AspNetCore.Components' (are you missing an assembly reference?)Add a package reference to the Microsoft.AspNetCore.Components.Web package to address the issue. Blazor routing improvements In this release we’ve revised the Blazor Code: RouterCode: RouterCode: @pageCode: RouteAttributeCode: RouterCode: FoundCode: RouterCode: NotFoundTo render the component with the matched route, use the new Code: RouteViewCode: RouteDataCode: RouterCode: RouteViewCode: <Router AppAssembly="typeof(Program).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" DefaultLayout="typeof(MainLayout)" /> </Found> <NotFound> <h1>Page not found</h1> <p>Sorry, but there's nothing here!</p> </NotFound>
</Router>To render a component using a particular layout, use the new Code: LayoutViewCode: <Router AppAssembly="typeof(Program).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" DefaultLayout="typeof(MainLayout)" /> </Found> <NotFound> <LayoutView Layout="typeof(MainLayout)"> <h1>Page not found</h1> <p>Sorry, but there's nothing here!</p> </LayoutView> </NotFound>
</Router>Authorization is no longer handled directly by the Code: RouterCode: AuthorizeRouteViewCode: AuthorizeRouteViewCode: RouteViewCode: AuthorizeAttributeCode: AuthorizeRouteViewCode: AuthenticationStateCode: AuthenticationStateCode: CascadingAuthenticationStateCode: <Router AppAssembly="@typeof(Program).Assembly"> <Found Context="routeData"> <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" /> </Found> <NotFound> <CascadingAuthenticationState> <LayoutView Layout="@typeof(MainLayout)"> <p>Sorry, there's nothing at this address.</p> </LayoutView> </CascadingAuthenticationState> </NotFound>
</Router>You can optionally set the Code: NotAuthorizedCode: AuthorizingCode: AuthorizedRouteViewCode: <Router AppAssembly="@typeof(Program).Assembly"> <Found Context="routeData"> <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)"> <NotAuthorized> <p>Nope, nope!</p> </NotAuthorized> </AuthorizeRouteView> </Found>
</Router>You can now specify additional assemblies for the Code: RouterCode: AppAssemblyCode: AdditionalAssembliesCode: Component1Code: <Router AppAssembly="typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Component1).Assembly }> ...
</Router>We’ve reenabled support for rendering multiple components from a view or page in a Blazor Server app. To render a component from a .cshtml file, use the Code: Html.RenderComponentAsync<TComponent>(RenderMode renderMode, object parameters)Code: RenderModeRenderMode | Description | Supports parameters? Static | Statically render the component with the specified parameters. | Yes Server | Render a marker where the component should be rendered interactively by the Blazor Server app. | No ServerPrerendered | Statically prerender the component along with a marker to indicate the component should later be rendered interactively by the Blazor Server app. | No Support for stateful prerendering has been removed in this release due to security concerns. You can no longer prerender components and then connect back to the same component state when the app loads. We may reenable this feature in a future release post .NET Core 3.0. Blazor Server apps also no longer require that the entry point components be registered in the app’s Code: ConfigureCode: MapBlazorHub()Smarter reconnection for Blazor Server apps Blazor Server apps are stateful and require an active connection to the server in order to function. If the network connection is lost, the app will try to reconnect to the server. If the connection can be reestablished but the server state is lost, then reconnection will fail. Blazor Server apps will now detect this condition and recommend the user to refresh the browser instead of retrying to connect. Utility base component classes for managing a dependency injection scope In ASP.NET Core apps, scoped services are typically scoped to the current request. After the request completes, any scoped or transient services are disposed by the dependency injection (DI) system. In Blazor Server apps, the request scope lasts for the duration of the client connection, which can result in transient and scoped services living much longer than expected. To scope services to the lifetime of a component you can use the new Code: OwningComponentBaseCode: OwningComponentBase<TService>Code: ScopedServicesCode: IServiceProviderCode: @inheritsCode: @page "/users"
@attribute [Authorize]
@inherits OwningComponentBase<Data.ApplicationDbContext> <h1>Users (@Service.Users.Count())</h1>
<ul> @foreach (var user in Service.Users) { <li>@user.UserName</li> }
</ul>Note: Services injected into the component using Code: @injectCode: InjectAttributeRazor component unit test framework prototype We’ve started experimenting with building a unit test framework for Razor components. You can read about the prototype in Steve Sanderson’s Unit testing Blazor components – a prototype blog post. While this work won’t ship with .NET Core 3.0, we’d still love to get your feedback early in the design process. Take a look at the code on GitHub and let us know what you think! Helper methods for returning Problem Details from controllers Problem Details is a standardized format for returning error information from an HTTP endpoint. We’ve added new Code: ProblemCode: ValidationProblemCode: [Route("/error")]
public ActionResult<ProblemDetails> HandleError()
{ return Problem(title: "An error occurred while processing your request", statusCode: 500);
}To improve compatibility with the existing Code: Grpc.CoreCode: Grpc.CoreCode: // Old
using var httpClient = new HttpClient() { BaseAddress = new Uri("https://localhost:5001") };
var client = GrpcClient.Create<GreeterClient>(httpClient); // New
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new GreeterClient(channel); var reply = await client.GreetAsync(new HelloRequest { Name = "Santa" });gRPC streaming responses return a custom Code: IAsyncStreamReaderCode: // Old
while (await requestStream.MoveNext(CancellationToken.None))
{ var message = requestStream.Current; // …
} // New and improved
await foreach (var message in requestStream.ReadAllAsync())
{ // …
}We hope you enjoy the new features in this preview release of ASP.NET Core and Blazor! Please let us know what you think by filing issues on GitHub. Thanks for trying out ASP.NET Core and Blazor! Daniel Roth Principal Program Manager, ASP.NET Follow Daniel https://devblogs.microsoft.com/aspnet/author/danroth27/feed/ |