100% нашли этот документ полезным (3 голоса)
24 просмотров19 страниц

Beginning Azure Static Web Apps: Building and Deploying Dynamic Web Applications With Blazor 1st Edition Stacy Cashmore Instant Download

Книга 'Beginning Azure Static Web Apps' Стейси Кэшмор предоставляет руководство по созданию и развертыванию динамических веб-приложений с использованием Blazor и Azure Static Web Apps. Она охватывает настройку окружения, создание приложений и их развертывание, а также отладку и конфигурацию статических веб-приложений. Книга предназначена как для новичков, так и для разработчиков, желающих улучшить свои навыки в работе с Azure.

Загружено:

chemladombek
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
100% нашли этот документ полезным (3 голоса)
24 просмотров19 страниц

Beginning Azure Static Web Apps: Building and Deploying Dynamic Web Applications With Blazor 1st Edition Stacy Cashmore Instant Download

Книга 'Beginning Azure Static Web Apps' Стейси Кэшмор предоставляет руководство по созданию и развертыванию динамических веб-приложений с использованием Blazor и Azure Static Web Apps. Она охватывает настройку окружения, создание приложений и их развертывание, а также отладку и конфигурацию статических веб-приложений. Книга предназначена как для новичков, так и для разработчиков, желающих улучшить свои навыки в работе с Azure.

Загружено:

chemladombek
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 19

Beginning Azure Static Web Apps: Building and

Deploying Dynamic Web Applications with Blazor


1st Edition Stacy Cashmore pdf download

https://ebookmeta.com/product/beginning-azure-static-web-apps-
building-and-deploying-dynamic-web-applications-with-blazor-1st-
edition-stacy-cashmore-2/

Download more ebook from https://ebookmeta.com


Beginning Azure
Static Web Apps
Building and Deploying Dynamic Web
Applications with Blazor

Stacy Cashmore
Beginning Azure
Static Web Apps
Building and Deploying Dynamic
Web Applications with Blazor

Stacy Cashmore
Beginning Azure Static Web Apps: Building and Deploying Dynamic Web
Applications with Blazor

Stacy Cashmore
Amsterdam, The Netherlands

ISBN-13 (pbk): 978-1-4842-8145-1 ISBN-13 (electronic): 978-1-4842-8146-8


https://doi.org/10.1007/978-1-4842-8146-8
Copyright © 2022 by Stacy Cashmore
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Smriti Srivastava
Development Editor: Laura Berendson
Coordinating Editor: Shrikant Vishwakarma
Cover designed by eStudioCalamar
Cover image designed by Pexels
Distributed to the book trade worldwide by Springer Science+Business Media LLC, 1 New York Plaza, Suite
4600, New York, NY 10004. Phone 1-800-SPRINGER, fax (201) 348-4505, email orders-ny@springer-sbm.
com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner)
is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware
corporation.
For information on translations, please e-mail [email protected]; for reprint,
paperback, or audio rights, please e-mail [email protected], or visit http://www.apress.
com/rights-permissions.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub via the book’s product page, located at https://link.springer.com/book/10.1007/
978-1-4842-8145-1.
Printed on acid-free paper
Dedication
To Dad, one of the last things that you said to me was that if I put my
mind to do something, you had no doubt it would be done.
I said that I didn’t believe it. Well… I’ve somehow managed to write
this book and wish that you were here to see it. Miss you.
To my partner and child, I know that you want to
remain anonymous, but I couldn’t not dedicate this book
to you as well. Thanks for putting up with me. Love you both!
Table of Contents
About the Author��������������������������������������������������������������������������������������������������� xiii

About the Technical Reviewers�������������������������������������������������������������������������������xv


Acknowledgments�������������������������������������������������������������������������������������������������xvii

Part I: Getting Started������������������������������������������������������������������������������������� 1


Chapter 1: Introduction�������������������������������������������������������������������������������������������� 3
JamStack�������������������������������������������������������������������������������������������������������������������������������������� 3
BlamStack������������������������������������������������������������������������������������������������������������������������������������� 4
Azure Static Web Apps������������������������������������������������������������������������������������������������������������������ 4
Book Focus����������������������������������������������������������������������������������������������������������������������������������� 5
Let’s Get Started!�������������������������������������������������������������������������������������������������������������������������� 6

Chapter 2: Setting Up the Environment�������������������������������������������������������������������� 7


Microsoft Account and Azure Subscription����������������������������������������������������������������������������������� 8
GitHub Account����������������������������������������������������������������������������������������������������������������������������� 9
GitHub Repo�������������������������������������������������������������������������������������������������������������������������������� 12
Naming the Repository���������������������������������������������������������������������������������������������������������� 13
Add a README File���������������������������������������������������������������������������������������������������������������� 13
Add a .gitignore��������������������������������������������������������������������������������������������������������������������� 14
Choose a License������������������������������������������������������������������������������������������������������������������ 16
Default Branch����������������������������������������������������������������������������������������������������������������������� 17
Git������������������������������������������������������������������������������������������������������������������������������������������������ 19
Clone the Repository to Our Machine����������������������������������������������������������������������������������������� 22
Visual Studio 2022���������������������������������������������������������������������������������������������������������������������� 27
Other Languages������������������������������������������������������������������������������������������������������������������������� 30
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 30

v
Table of Contents

Chapter 3: Creating the Application����������������������������������������������������������������������� 31


Technical Requirements�������������������������������������������������������������������������������������������������������������� 31
A Brief Introduction to Git������������������������������������������������������������������������������������������������������������ 31
Clone������������������������������������������������������������������������������������������������������������������������������������� 32
Pull���������������������������������������������������������������������������������������������������������������������������������������� 32
Commit���������������������������������������������������������������������������������������������������������������������������������� 32
Push��������������������������������������������������������������������������������������������������������������������������������������� 32
Creating the Client Application���������������������������������������������������������������������������������������������������� 33
Exploring the Scaffolded Blazor App������������������������������������������������������������������������������������������� 37
Application Root Folder: Client���������������������������������������������������������������������������������������������� 38
wwwroot Folder�������������������������������������������������������������������������������������������������������������������� 40
Shared Folder������������������������������������������������������������������������������������������������������������������������ 42
Pages Folder�������������������������������������������������������������������������������������������������������������������������� 43
Running the Application�������������������������������������������������������������������������������������������������������� 47
Adding the API Application���������������������������������������������������������������������������������������������������������� 52
Creating the Azure Function Project������������������������������������������������������������������������������������������� 52
Consuming the Function in the Client App���������������������������������������������������������������������������������� 59
Create a Function to Deliver the Weather Forecast��������������������������������������������������������������� 60
Call the Function from the Client Application������������������������������������������������������������������������ 64
Pushing to GitHub����������������������������������������������������������������������������������������������������������������������� 65
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 70

Chapter 4: Creating the Static Web App����������������������������������������������������������������� 73


Technical Requirements�������������������������������������������������������������������������������������������������������������� 73
Create Resource Group��������������������������������������������������������������������������������������������������������������� 73
Create the Static Web App���������������������������������������������������������������������������������������������������������� 78
Base Information������������������������������������������������������������������������������������������������������������������� 81
Logging In to GitHub�������������������������������������������������������������������������������������������������������������� 84
Setup for the Blazor Build������������������������������������������������������������������������������������������������������ 86
Opening the New Resource��������������������������������������������������������������������������������������������������� 90
Overview of the GitHub Workflow����������������������������������������������������������������������������������������������� 91

vi
Table of Contents

Viewing the Deployed Application����������������������������������������������������������������������������������������������� 93


Conclusion���������������������������������������������������������������������������������������������������������������������������������� 95

Chapter 5: Simple Debugging��������������������������������������������������������������������������������� 97


Technical Requirements�������������������������������������������������������������������������������������������������������������� 97
Local vs. Azure Environment������������������������������������������������������������������������������������������������� 97
Visual Studio Debugging������������������������������������������������������������������������������������������������������������� 98
Setting the Port Numbers������������������������������������������������������������������������������������������������������ 98
Changes to the Client Project���������������������������������������������������������������������������������������������� 100
Changes to the Api Project�������������������������������������������������������������������������������������������������� 103
Running the Application������������������������������������������������������������������������������������������������������ 104
Static Web App CLI Debugging�������������������������������������������������������������������������������������������������� 109
Resetting the Code�������������������������������������������������������������������������������������������������������������� 109
The Azure Static Web App CLI���������������������������������������������������������������������������������������������� 110
Running the Static Web App CLI������������������������������������������������������������������������������������������ 112
Debugging the Client Using the CLI������������������������������������������������������������������������������������� 114
Cleaning Up the Breakpoints����������������������������������������������������������������������������������������������������� 115
Save the Changes for the Port Numbers����������������������������������������������������������������������������������� 116
The CLI and Real Azure Resource���������������������������������������������������������������������������������������� 116
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 117

Part II: Creating Our App����������������������������������������������������������������������������� 119


Chapter 6: Retrieving Blog Data��������������������������������������������������������������������������� 121
Technical Requirements������������������������������������������������������������������������������������������������������������ 121
Clean Up������������������������������������������������������������������������������������������������������������������������������������ 121
Api��������������������������������������������������������������������������������������������������������������������������������������� 122
Client����������������������������������������������������������������������������������������������������������������������������������� 122
Creating the Data Source���������������������������������������������������������������������������������������������������������� 124
Azure CosmosDB Free Tier�������������������������������������������������������������������������������������������������� 124
Create the Azure Resource�������������������������������������������������������������������������������������������������� 124
Seed the Table��������������������������������������������������������������������������������������������������������������������� 128

vii
Table of Contents

Blog Post Retrieval�������������������������������������������������������������������������������������������������������������������� 130


Data Model Classes������������������������������������������������������������������������������������������������������������� 130
Retrieving Blog Post Summaries����������������������������������������������������������������������������������������� 132
Retrieving a Single, Full Blog Post��������������������������������������������������������������������������������������� 138
Deploying the Functions������������������������������������������������������������������������������������������������������ 139
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 141

Chapter 7: Displaying Data����������������������������������������������������������������������������������� 143


Technical Requirements������������������������������������������������������������������������������������������������������������ 143
Reading the Summaries������������������������������������������������������������������������������������������������������������ 143
Referencing the Models Project������������������������������������������������������������������������������������������ 144
Create the Service��������������������������������������������������������������������������������������������������������������� 144
Creating the Blog Post Summary Page�������������������������������������������������������������������������������� 147
Display the Whole Summary������������������������������������������������������������������������������������������������ 151
Displaying the Whole Blog Post������������������������������������������������������������������������������������������������ 154
Reading the Blog Post��������������������������������������������������������������������������������������������������������� 155
Display Blog Post����������������������������������������������������������������������������������������������������������������� 157
Add the First Blog Post to the Index Page��������������������������������������������������������������������������������� 160
Prepare the Index.razor File������������������������������������������������������������������������������������������������ 160
Create the BlogPostSummary Component�������������������������������������������������������������������������� 162
Change the Blog Post Summary Page��������������������������������������������������������������������������������� 164
Checking Our Results���������������������������������������������������������������������������������������������������������������� 165
Running Locally������������������������������������������������������������������������������������������������������������������� 165
Deploy Blog Post������������������������������������������������������������������������������������������������������������������ 167
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 168

Chapter 8: Static Web App Configuration������������������������������������������������������������� 169


Technical Requirements������������������������������������������������������������������������������������������������������������ 169
Creating the staticwebapp.config.json File������������������������������������������������������������������������������� 170
Navigation Fallback������������������������������������������������������������������������������������������������������������������� 171
Routes��������������������������������������������������������������������������������������������������������������������������������������� 175
Restricting Access to Resources����������������������������������������������������������������������������������������� 177

viii
Table of Contents

Protecting Resources���������������������������������������������������������������������������������������������������������� 177


Moving Resources – Temporarily���������������������������������������������������������������������������������������� 179
Moving Resources – Permanently��������������������������������������������������������������������������������������� 179
Response Overrides������������������������������������������������������������������������������������������������������������������ 180
Example Configuration�������������������������������������������������������������������������������������������������������������� 180
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 182

Part III: Authentication������������������������������������������������������������������������������� 183


Chapter 9: Authentication������������������������������������������������������������������������������������� 185
Technical Requirements������������������������������������������������������������������������������������������������������������ 185
Authentication Basics��������������������������������������������������������������������������������������������������������������� 185
Standard Authentication����������������������������������������������������������������������������������������������������������� 186
ClientPrincipal��������������������������������������������������������������������������������������������������������������������� 189
Accessing Authentication Data in Our Application��������������������������������������������������������������� 190
Adding API Authentication��������������������������������������������������������������������������������������������������� 190
Client-Side Authentication��������������������������������������������������������������������������������������������������� 194
Login Screen������������������������������������������������������������������������������������������������������������������������ 203
Role-Based Access�������������������������������������������������������������������������������������������������������������� 206
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 210

Chapter 10: Creating Blog Posts��������������������������������������������������������������������������� 211


Technical Requirements������������������������������������������������������������������������������������������������������������ 211
Adding the Azure Functions������������������������������������������������������������������������������������������������� 211
Creating Blog Posts with the POST Method������������������������������������������������������������������������������ 212
Updating Blog Posts with the PUT HTTP Method����������������������������������������������������������������� 215
Deleting Blog Posts with the DELETE HTTP Method������������������������������������������������������������ 217
Securing the Functions�������������������������������������������������������������������������������������������������������� 219
Updating the Blog Post Services����������������������������������������������������������������������������������������� 220
Creating Blog Posts������������������������������������������������������������������������������������������������������������� 220
Updating Blog Posts������������������������������������������������������������������������������������������������������������ 225
Deleting Blog Posts������������������������������������������������������������������������������������������������������������� 227
Adding the Blog Post Edit Page������������������������������������������������������������������������������������������������� 229

ix
Table of Contents

Adding the Create Link�������������������������������������������������������������������������������������������������������� 236


Adding the Edit and Delete Links����������������������������������������������������������������������������������������� 236
Deploy and Test������������������������������������������������������������������������������������������������������������������� 237
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 239

Part IV: SWA Functionality�������������������������������������������������������������������������� 241


Chapter 11: Static Web App CLI���������������������������������������������������������������������������� 243
Technical Requirements������������������������������������������������������������������������������������������������������������ 243
Running the Application������������������������������������������������������������������������������������������������������������ 243
Changing Port Numbers������������������������������������������������������������������������������������������������������������ 246
Azure Function Port Numbers���������������������������������������������������������������������������������������������� 246
Changing the Static Web App CLI Default Port�������������������������������������������������������������������� 247
Changing the Client Port������������������������������������������������������������������������������������������������������ 247
Running Static Content������������������������������������������������������������������������������������������������������������� 248
Publish the Client Project���������������������������������������������������������������������������������������������������� 248
Run the Static Web App CLI with Static Files����������������������������������������������������������������������� 249
Extending the .gitignore File������������������������������������������������������������������������������������������������ 250
Static Web App CLI Configuration���������������������������������������������������������������������������������������� 251
Commit Our Changes���������������������������������������������������������������������������������������������������������������� 255
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 255

Chapter 12: Testing in Azure�������������������������������������������������������������������������������� 257


Technical Requirements������������������������������������������������������������������������������������������������������������ 257
Azure Static Web App Staging Slots������������������������������������������������������������������������������������������ 257
Making a Branch����������������������������������������������������������������������������������������������������������������������� 259
Creating the Staging Slot���������������������������������������������������������������������������������������������������������� 260
Testing in the Cloud������������������������������������������������������������������������������������������������������������������ 262
Making a Second Change��������������������������������������������������������������������������������������������������������� 263
Revisiting the Stage Environment��������������������������������������������������������������������������������������������� 263
Staging Environment Settings�������������������������������������������������������������������������������������������������� 264
Staging Environment Limitations���������������������������������������������������������������������������������������������� 265
Free Tier������������������������������������������������������������������������������������������������������������������������������ 266

x
Table of Contents

Removing Staging Environments���������������������������������������������������������������������������������������������� 266


Automatically Cleaning Staging Environments�������������������������������������������������������������������� 267
Manually Cleaning Up Environments����������������������������������������������������������������������������������� 269
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 269

Chapter 13: Custom Domains������������������������������������������������������������������������������� 271


Technical Requirements������������������������������������������������������������������������������������������������������������ 271
Adding a Custom Domain���������������������������������������������������������������������������������������������������������� 272
What Domains to Add���������������������������������������������������������������������������������������������������������� 272
Azure Portal Custom Domain Pane�������������������������������������������������������������������������������������� 273
Self-Managed Domain��������������������������������������������������������������������������������������������������������� 274
Domain on Azure DNS��������������������������������������������������������������������������������������������������������� 276
Azure-Generated URL���������������������������������������������������������������������������������������������������������������� 277
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 278

Appendix A: Next Steps���������������������������������������������������������������������������������������� 279


Add User Details������������������������������������������������������������������������������������������������������������������������ 279
Blog Post Summary Refresh����������������������������������������������������������������������������������������������������� 279
S
 earch��������������������������������������������������������������������������������������������������������������������������������������� 280
Custom Summary Length��������������������������������������������������������������������������������������������������������� 280
Preview Complete Flag������������������������������������������������������������������������������������������������������������� 280
T ag Lookup�������������������������������������������������������������������������������������������������������������������������������� 281
Blog Post Preview��������������������������������������������������������������������������������������������������������������������� 281
Make the Application Multiauthor��������������������������������������������������������������������������������������������� 281
Fully Implement Post Status����������������������������������������������������������������������������������������������������� 281
S
 tyling��������������������������������������������������������������������������������������������������������������������������������������� 282

Appendix B: Changing the GitHub Workflow��������������������������������������������������������� 283


Opening the Workflow File�������������������������������������������������������������������������������������������������������� 283

Index��������������������������������������������������������������������������������������������������������������������� 285

xi
About the Author
Speaker, author, and software developer, Stacy Cashmore
has been developing solutions since the mid-1990s in
various companies and industries ranging from facilitating
contract jobbing to allowing consumers to close a mortgage
without the help of a financial adviser – with lots in between.
She has a passion for sharing knowledge: using story telling
for sharing her experiences to help teams grow in the ways that
they develop software and work together and performing live
coding demonstrations to inspire others to try new technologies.
For her effort in the community, Stacy has been awarded the Microsoft MVP for
Developer Technologies since 2020.

xiii
About the Technical Reviewers
Marc Duiker is a Senior Developer Advocate at Ably with a
strong focus on event-driven architectures in the Azure cloud.
He loves helping developers to achieve more every day.
You might have seen Marc at a developer meetup
or conference since he's a regular speaker in the area of
Azure cloud and serverless technologies. He started Azure
Functions University, a free and open source learning
curriculum on GitHub, where everyone can learn about
Azure Functions at their own pace. In 2019, 2020, and
2021, Marc received the Microsoft Azure MVP award for his
community contributions.
In his spare time, Marc likes to give attention to the creative part of his brain. He likes
to create pixel art (check out VSCode Pets), code visuals and music, and an occasional
retro game.

Jimmy Engström has been developing ever since he was


seven years old and got his first computer. He loves to be on
the cutting edge of technology, trying new things. When he
got wind of Blazor, he immediately realized the potential and
adopted it already when it was in beta. He has been running
Blazor in production since it was launched by Microsoft.
He is the author of Web Development with Blazor and the
co-host of Coding After Work (podcast and stream).
His passion for the .NET industry and community has
taken him around the world, speaking about development.
Microsoft has recognized this passion by awarding him the Microsoft Most Valuable
Professional award nine years in a row.

xv
Acknowledgments
This book has been a while in the making. Not only the writing itself but also the journey
leading up to it. And there are many people to whom I owe a huge thank you.
I need to start with the amazing Jessica Engström. For your kindness to a terrified
conference attendee and starting me on this journey by convincing me to try my hand at
public speaking and for becoming an amazing friend.
To all the speakers from Swetugg 2019 for helping me get through that first talk, I’m
honored that I can call so many of you friends now.
And to Mattias Karlsson, for inviting me to write my first technical talk for your
conference in 2020. That really put me on the road to making technical content and
looking at new technologies – even if Covid got in the way and it had to be delivered
virtually! I’d still love to give a technical talk for your user group/conference at
some point.
To Cindy Velthuizen and Tom Ehren, for your support, advice, and time over the last
few years as I made this journey.
A huge thanks to Jonathan Gennick for reaching out, asking me if I would be
interested in writing a book, and helping me through those first stages.
To Shrikant Vishwakarma and Smriti Srivastava for your help while actually writing
the book and keeping me on track.
And everyone else at Apress who make getting books from Word documents on my
computer to being an actual book possible.
To my technical reviewers.
Marc Duiker for checking that I was doing the right things with the Azure Functions
through the chapters, and laughter at some of the comments I made.
And Jimmy Engström for doing the same with the Blazor code and helping me think
my way out of problems during the writing.
Of course, any issues that remain here are entirely down to me!
And to everyone else, too numerous to mention, who have helped me get this book
into readers’ hands.

xvii
Acknowledgments

Finally, my parents for always supporting me in what I wanted, and needed to do,
and cheering me on when it would have been so easy to give up at school, college, and
university. It means the world to me that you believed in me through those years.
And my partner and child, who wish to remain anonymous, but it wouldn’t be right
to not include them here. For your love, support, and helping me stay on track, I am
forever indebted.

xviii
Another Random Scribd Document
with Unrelated Content
Section 4. Information about Donations to
the Project Gutenberg Literary Archive
Foundation
Project Gutenberg™ depends upon and cannot survive without
widespread public support and donations to carry out its mission
of increasing the number of public domain and licensed works
that can be freely distributed in machine-readable form
accessible by the widest array of equipment including outdated
equipment. Many small donations ($1 to $5,000) are particularly
important to maintaining tax exempt status with the IRS.

The Foundation is committed to complying with the laws


regulating charities and charitable donations in all 50 states of
the United States. Compliance requirements are not uniform
and it takes a considerable effort, much paperwork and many
fees to meet and keep up with these requirements. We do not
solicit donations in locations where we have not received written
confirmation of compliance. To SEND DONATIONS or determine
the status of compliance for any particular state visit
www.gutenberg.org/donate.

While we cannot and do not solicit contributions from states


where we have not met the solicitation requirements, we know
of no prohibition against accepting unsolicited donations from
donors in such states who approach us with offers to donate.

International donations are gratefully accepted, but we cannot


make any statements concerning tax treatment of donations
received from outside the United States. U.S. laws alone swamp
our small staff.

Please check the Project Gutenberg web pages for current


donation methods and addresses. Donations are accepted in a
number of other ways including checks, online payments and
credit card donations. To donate, please visit:
www.gutenberg.org/donate.

Section 5. General Information About


Project Gutenberg™ electronic works
Professor Michael S. Hart was the originator of the Project
Gutenberg™ concept of a library of electronic works that could
be freely shared with anyone. For forty years, he produced and
distributed Project Gutenberg™ eBooks with only a loose
network of volunteer support.

Project Gutenberg™ eBooks are often created from several


printed editions, all of which are confirmed as not protected by
copyright in the U.S. unless a copyright notice is included. Thus,
we do not necessarily keep eBooks in compliance with any
particular paper edition.

Most people start at our website which has the main PG search
facility: www.gutenberg.org.

This website includes information about Project Gutenberg™,


including how to make donations to the Project Gutenberg
Literary Archive Foundation, how to help produce our new
eBooks, and how to subscribe to our email newsletter to hear
about new eBooks.

Вам также может понравиться