100% found this document useful (6 votes)
805 views

Download Complete (Ebook) Beginning gRPC with ASP.NET Core 6: Build Applications using ASP.NET Core Razor Pages, Angular, and Best Practices in .NET 6 by Anthony Giretti ISBN 9781484280072, 1484280075 PDF for All Chapters

The document lists various eBooks related to ASP.NET Core and gRPC, including titles such as 'Beginning gRPC with ASP.NET Core 6' by Anthony Giretti and 'Pro ASP.NET Core 6' by Adam Freeman. Each entry includes the book's ISBN, a brief description, and a link to download the eBook. The document emphasizes the availability of instant digital products in multiple formats for readers.

Uploaded by

milalumemnon
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (6 votes)
805 views

Download Complete (Ebook) Beginning gRPC with ASP.NET Core 6: Build Applications using ASP.NET Core Razor Pages, Angular, and Best Practices in .NET 6 by Anthony Giretti ISBN 9781484280072, 1484280075 PDF for All Chapters

The document lists various eBooks related to ASP.NET Core and gRPC, including titles such as 'Beginning gRPC with ASP.NET Core 6' by Anthony Giretti and 'Pro ASP.NET Core 6' by Adam Freeman. Each entry includes the book's ISBN, a brief description, and a link to download the eBook. The document emphasizes the availability of instant digital products in multiple formats for readers.

Uploaded by

milalumemnon
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 81

Download the Full Ebook and Access More Features - ebooknice.

com

(Ebook) Beginning gRPC with ASP.NET Core 6: Build


Applications using ASP.NET Core Razor Pages,
Angular, and Best Practices in .NET 6 by Anthony
Giretti ISBN 9781484280072, 1484280075
https://ebooknice.com/product/beginning-grpc-with-asp-net-
core-6-build-applications-using-asp-net-core-razor-pages-
angular-and-best-practices-in-net-6-42509214

OR CLICK HERE

DOWLOAD EBOOK

Download more ebook instantly today at https://ebooknice.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Start reading on any device today!

(Ebook) Pro ASP.NET Core 6: Develop Cloud-Ready Web


Applications Using MVC, Blazor, and Razor Pages by Adam
Freeman ISBN 9781484279564, 1484279565
https://ebooknice.com/product/pro-asp-net-core-6-develop-cloud-ready-
web-applications-using-mvc-blazor-and-razor-pages-38495700

ebooknice.com

(Ebook) Beginning Database Programming Using ASP.NET Core


3: With MVC, Razor Pages, Web API, jQuery, Angular, SQL
Server, and NoSQL by Bipin Joshi ISBN 9781484255087,
1484255089
https://ebooknice.com/product/beginning-database-programming-using-
asp-net-core-3-with-mvc-razor-pages-web-api-jquery-angular-sql-server-
and-nosql-52948468
ebooknice.com

(Ebook) Beginning Database Programming Using ASP.NET Core


3: With MVC, Razor Pages, Web API, jQuery, Angular, SQL
Server, and NoSQL by Bipin Joshi ISBN 9781484255087,
1484255089
https://ebooknice.com/product/beginning-database-programming-using-
asp-net-core-3-with-mvc-razor-pages-web-api-jquery-angular-sql-server-
and-nosql-24684606
ebooknice.com

(Ebook) Pro ASP.NET Core 6: Develop Cloud-Ready Web


Applications Using MVC, Blazor, and Razor Pages by Adam
Freeman ISBN 9781484279564, 9781484279571, 1484279565,
1484279573
https://ebooknice.com/product/pro-asp-net-core-6-develop-cloud-ready-
web-applications-using-mvc-blazor-and-razor-pages-42831304

ebooknice.com
(Ebook) C# 10 and .NET 6 – Modern Cross-Platform
Development: Build apps, websites, and services with
ASP.NET Core 6, Blazor, and EF Core 6 using Visual Studio
2022 and Visual Studio Code, 6th Edition by Mark J. Price
https://ebooknice.com/product/c-10-and-net-6-modern-cross-platform-
ISBN B09JV37DM6
development-build-apps-websites-and-services-with-asp-net-
core-6-blazor-and-ef-core-6-using-visual-studio-2022-and-visual-
studio-code-6th-edition-51500340
ebooknice.com

(Ebook) ASP.NET Core Razor Pages in Action by Mike Brind


ISBN 9781617299988, 1617299987

https://ebooknice.com/product/asp-net-core-razor-pages-in-
action-47517782

ebooknice.com

(Ebook) Pro Microservices in .NET 6: With Examples Using


ASP.NET Core 6, MassTransit, and Kubernetes by Sean
Whitesell, Rob Richardson, Matthew D. Groves ISBN
9781484278321, 1484278321
https://ebooknice.com/product/pro-microservices-in-net-6-with-
examples-using-asp-net-core-6-masstransit-and-kubernetes-37258796

ebooknice.com

(Ebook) Pro ASP.NET Core Identity: Under the Hood with


Authentication and Authorization in ASP.NET Core 5 and 6
Applications by Adam Freeman ISBN 9781484268575,
9781484268582, 1484268571, 148426858X
https://ebooknice.com/product/pro-asp-net-core-identity-under-the-
hood-with-authentication-and-authorization-in-asp-net-
core-5-and-6-applications-23948514
ebooknice.com

(Ebook) Pro Microservices in .NET 6: With Examples Using


ASP.NET Core 6, MassTransit, and Kubernetes by Sean
Whitesell; Rob Richardson; Matthew D. Groves ISBN
9781484278321, 9781484278338, 1484278321, 148427833X
https://ebooknice.com/product/pro-microservices-in-net-6-with-
examples-using-asp-net-core-6-masstransit-and-kubernetes-42449494

ebooknice.com
Beginning gRPC
with ASP.NET Core 6
Build Applications using ASP.NET
Core Razor Pages, Angular,
and Best Practices in .NET 6

Anthony Giretti
Beginning gRPC with
ASP.NET Core 6
Build Applications using ASP.NET
Core Razor Pages, Angular, and Best
Practices in .NET 6

Anthony Giretti
Beginning gRPC with ASP.NET Core 6: Build Applications using ASP.NET Core Razor
Pages, Angular, and Best Practices in .NET 6
Anthony Giretti
La Salle, QC, Canada

ISBN-13 (pbk): 978-1-4842-8007-2 ISBN-13 (electronic): 978-1-4842-8008-9


https://doi.org/10.1007/978-1-4842-8008-9

Copyright © 2022 by Anthony Giretti


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: Joan Murray
Development Editor: Laura Berendson
Coordinating Editor: Jill Balzano
Copyeditor: Bill McManus
Cover image designed by Freepik (www.freepik.com)
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].
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 https://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 at https://github.com/Apress/beg-grpc-w-asp.net-core-6.
Printed on acid-free paper
Table of Contents
About the Author����������������������������������������������������������������������������������������������������� ix

About the Technical Reviewer��������������������������������������������������������������������������������� xi


Acknowledgments������������������������������������������������������������������������������������������������� xiii
Introduction�������������������������������������������������������������������������������������������������������������xv

Part I: Getting Started with .NET 6������������������������������������������������������������������ 1


Chapter 1: Welcome to Modern .NET������������������������������������������������������������������������ 3
A Brief History of .NET������������������������������������������������������������������������������������������������������������������ 3
.NET Framework���������������������������������������������������������������������������������������������������������������������� 4
.NET Core��������������������������������������������������������������������������������������������������������������������������������� 5
.NET Standard�������������������������������������������������������������������������������������������������������������������������� 6
Modern .NET: A Unified Platform��������������������������������������������������������������������������������������������������� 7
Mono and CoreCLR������������������������������������������������������������������������������������������������������������������ 8
.NET Schedule and What It Means������������������������������������������������������������������������������������������������ 9
How to Explore .NET 6������������������������������������������������������������������������������������������������������������������� 9
.NET 5 and 6 Improvements�������������������������������������������������������������������������������������������������� 10
Get Started with .NET 6��������������������������������������������������������������������������������������������������������� 11
Recap of C# 9 and Introduction to C# 10������������������������������������������������������������������������������������ 17
Recap of C# 9������������������������������������������������������������������������������������������������������������������������ 17
Introduction to C# 10������������������������������������������������������������������������������������������������������������� 29
Summary������������������������������������������������������������������������������������������������������������������������������������ 31

Chapter 2: Introducing ASP.NET Core 6������������������������������������������������������������������� 33


ASP.NET Core Fundamentals������������������������������������������������������������������������������������������������������� 34
ASP.NET Core Web API����������������������������������������������������������������������������������������������������������������� 42
ASP.NET Core MVC���������������������������������������������������������������������������������������������������������������������� 53

iii
Table of Contents

ASP.NET Core Razor Pages���������������������������������������������������������������������������������������������������������� 59


ASP.NET Core Blazor������������������������������������������������������������������������������������������������������������������� 64
ASP.NET Core SignalR����������������������������������������������������������������������������������������������������������������� 72
ASP.NET Core gRPC��������������������������������������������������������������������������������������������������������������������� 76
ASP.NET Core Minimal APIs��������������������������������������������������������������������������������������������������������� 77
Summary������������������������������������������������������������������������������������������������������������������������������������ 81

Part II: gRPC Fundamentals�������������������������������������������������������������������������� 83


Chapter 3: Understanding the gRPC Specification������������������������������������������������� 85
Introduction to Remote Procedure Calls������������������������������������������������������������������������������������� 85
gRPC Concepts���������������������������������������������������������������������������������������������������������������������������� 87
Protocol Buffers��������������������������������������������������������������������������������������������������������������������� 87
gRPC Channel������������������������������������������������������������������������������������������������������������������������ 88
Types of gRPC Services��������������������������������������������������������������������������������������������������������� 91
Trailers����������������������������������������������������������������������������������������������������������������������������������� 93
gRPC Status��������������������������������������������������������������������������������������������������������������������������� 94
Deadline and Cancellation����������������������������������������������������������������������������������������������������� 95
gRPC Requests and Responses over HTTP/2������������������������������������������������������������������������ 95
Introduction to the HTTP/2 Protocol�������������������������������������������������������������������������������������������� 97
Multiplexing��������������������������������������������������������������������������������������������������������������������������� 98
Compression and Binary Data Transport������������������������������������������������������������������������������� 99
Flow Control�������������������������������������������������������������������������������������������������������������������������� 99
Server Push��������������������������������������������������������������������������������������������������������������������������� 99
Benefits, Drawbacks, and Use Cases������������������������������������������������������������������������������������������ 99
Benefits������������������������������������������������������������������������������������������������������������������������������� 100
Drawbacks��������������������������������������������������������������������������������������������������������������������������� 100
Use Cases���������������������������������������������������������������������������������������������������������������������������� 101
Summary���������������������������������������������������������������������������������������������������������������������������������� 102

Chapter 4: Protobufs��������������������������������������������������������������������������������������������� 103


About Protocol Buffers�������������������������������������������������������������������������������������������������������������� 103
Individual Declarations�������������������������������������������������������������������������������������������������������������� 104

iv
Table of Contents

Services Declaration����������������������������������������������������������������������������������������������������������������� 108


Messages Declaration��������������������������������������������������������������������������������������������������������������� 111
Scalar Type Values��������������������������������������������������������������������������������������������������������������� 113
Collections��������������������������������������������������������������������������������������������������������������������������� 113
Enumerations���������������������������������������������������������������������������������������������������������������������� 119
Nested Types����������������������������������������������������������������������������������������������������������������������� 122
Import Types������������������������������������������������������������������������������������������������������������������������ 122
Any, Value, Struct, Wrappers, Dates, and Times (Well-Known Types)����������������������������������� 123
Bytes������������������������������������������������������������������������������������������������������������������������������������ 137
One of���������������������������������������������������������������������������������������������������������������������������������� 141
Empty Messages����������������������������������������������������������������������������������������������������������������� 147
Comments��������������������������������������������������������������������������������������������������������������������������� 149
Summary���������������������������������������������������������������������������������������������������������������������������������� 151

Part III: gRPC and ASP.NET Core����������������������������������������������������������������� 153


Chapter 5: Creating an ASP.NET Core gRPC Application��������������������������������������� 155
Create an ASP.NET Core gRPC Application�������������������������������������������������������������������������������� 155
Create and Compile Protobuf Files�������������������������������������������������������������������������������������������� 160
Write, Configure, and Expose gRPC Services���������������������������������������������������������������������������� 165
Test Using gRPCurl and gRPCui Tools��������������������������������������������������������������������������������������� 180
gRPCurl�������������������������������������������������������������������������������������������������������������������������������� 180
gRPCui��������������������������������������������������������������������������������������������������������������������������������� 189
TLS Certificates������������������������������������������������������������������������������������������������������������������� 195
Manage Errors, Handle Responses, and Perform Logging�������������������������������������������������������� 196
Perform Message Validation����������������������������������������������������������������������������������������������������� 214
Support of ASP.NET Core gRPC on Microsoft Azure������������������������������������������������������������������� 219
Summary���������������������������������������������������������������������������������������������������������������������������������� 221

Chapter 6: API Versioning������������������������������������������������������������������������������������� 223


Version gRPC Services�������������������������������������������������������������������������������������������������������������� 223
Expose the Versions of Your Protobuf with ASP.NET Core Minimal APIs������������������������������������ 232
Summary���������������������������������������������������������������������������������������������������������������������������������� 237

v
Table of Contents

Chapter 7: Create a gRPC Client��������������������������������������������������������������������������� 239


Create a Console Application���������������������������������������������������������������������������������������������������� 240
Compile Protobuf Files and Generate gRPC Clients������������������������������������������������������������������ 244
Consume gRPC Services with .NET 6���������������������������������������������������������������������������������������� 252
Optimize Performance�������������������������������������������������������������������������������������������������������������� 268
Take Advantage of Compression����������������������������������������������������������������������������������������� 268
Define a Limit to Message Size������������������������������������������������������������������������������������������� 272
Keep HTTP/2 Connections Open������������������������������������������������������������������������������������������ 273
Increase HTTP/2 Maximum Connections����������������������������������������������������������������������������� 277
Get Message Validation Errors from the Server������������������������������������������������������������������������ 278
Summary���������������������������������������������������������������������������������������������������������������������������������� 281

Chapter 8: From WCF to gRPC������������������������������������������������������������������������������ 283


Differences and Similarities Between WCF and gRPC�������������������������������������������������������������� 283
What and What Not to Migrate from WCF to gRPC�������������������������������������������������������������������� 286
Summary���������������������������������������������������������������������������������������������������������������������������������� 298

Chapter 9: Import and Display Data with ASP.NET Core Razor Pages, Hosted
Services, and gRPC����������������������������������������������������������������������������� 299
Scenario Explanation���������������������������������������������������������������������������������������������������������������� 300
Create and Layer the ASP.NET Core gRPC Application�������������������������������������������������������������� 301
Set Up a SQL Server Database and Use Entity Framework Core to Access Data���������������������� 310
Set Up a SQL Server Database�������������������������������������������������������������������������������������������� 310
Using Entity Framework Core to Access Data��������������������������������������������������������������������� 311
Write the Business Logic and Expose the Country gRPC Microservice������������������������������������ 330
Write the Business Logic into the CountryService.BLL Layer���������������������������������������������� 330
Write the Country gRPC Service������������������������������������������������������������������������������������������ 332
Create and Layer the ASP.NET Core Razor Application�������������������������������������������������������������� 341
Create the Application Skeleton������������������������������������������������������������������������������������������ 342
Define Contracts and Domain Objects��������������������������������������������������������������������������������� 343
Implement the Data Access Layer with the gRPC Client����������������������������������������������������� 348

vi
Table of Contents

Implement the Business Logic Layer����������������������������������������������������������������������������������� 353


Configure the ASP.NET Core Razor Pages Application��������������������������������������������������������� 358
Upload a Data File with a Form, Display and Manage Data on Razor Pages���������������������������� 367
Summary���������������������������������������������������������������������������������������������������������������������������������� 385

Part IV: gRPC-web and ASP.NET Core��������������������������������������������������������� 387


Chapter 10: The gRPC-web Specification������������������������������������������������������������� 389
History and Specification of gRPC-web������������������������������������������������������������������������������������ 389
History of gRPC-web����������������������������������������������������������������������������������������������������������� 389
The gRPC-web Specification����������������������������������������������������������������������������������������������� 391
The gRPC-web JavaScript Libraries������������������������������������������������������������������������������������������ 392
gRPC-web vs. REST APIs���������������������������������������������������������������������������������������������������������� 393
Summary���������������������������������������������������������������������������������������������������������������������������������� 394

Chapter 11: Create a gRPC-web service from a gRPC-service with


ASP.NET Core������������������������������������������������������������������������������������� 395
Working with gRPC-web and the .NET Ecosystem������������������������������������������������������������������� 396
gRPC-web and ASP.NET Core 6������������������������������������������������������������������������������������������� 396
gRPC-web and All .NET Clients�������������������������������������������������������������������������������������������� 399
gRPC-web and ASP.NET Core 3+ Clients����������������������������������������������������������������������������� 402
Reworking the CountryService gRPC service for Browser Apps����������������������������������������������� 404
Support of ASP.NET Core gRPC-web on Microsoft Azure���������������������������������������������������������� 416
Summary���������������������������������������������������������������������������������������������������������������������������������� 417

Chapter 12: Import and Display Data with Angular 12 and gRPC-web���������������� 419
Introduction to SPAs������������������������������������������������������������������������������������������������������������������ 419
Generate TypeScript Stubs with Protoc������������������������������������������������������������������������������������� 421
Download the Correct Version of Protoc and Protobuf Well-Known Types�������������������������� 422
Download the ts-protoc-gen Plug-in����������������������������������������������������������������������������������� 426
Download Improbable’s gRPC-web Library and Google Protobufs Library�������������������������� 426
Executing the Protoc Command������������������������������������������������������������������������������������������ 426

vii
Table of Contents

Write Data Access with Improbable’s gRPC-web Client������������������������������������������������������������ 430


Upload a Data File and Display Data with TypeScript, a Web Worker, and gRPC-web�������������� 440
Manage Data with TypeScript and gRPC-web��������������������������������������������������������������������������� 450
Summary���������������������������������������������������������������������������������������������������������������������������������� 456

Part V: Security������������������������������������������������������������������������������������������� 457


Chapter 13: Secure Your Application with OpenId Connect���������������������������������� 459
Introduction to OpenId Connect������������������������������������������������������������������������������������������������ 459
Configure ASP.NET Core������������������������������������������������������������������������������������������������������������ 462
Use gRPCurl and gRPCui with a JWT���������������������������������������������������������������������������������������� 469
gRPCurl�������������������������������������������������������������������������������������������������������������������������������� 469
gRPCui��������������������������������������������������������������������������������������������������������������������������������� 471
Use a C# Client with a JWT������������������������������������������������������������������������������������������������������� 473
Use a gRPC-web Client with a JWT������������������������������������������������������������������������������������������ 476
Get User Identity Server Side���������������������������������������������������������������������������������������������������� 478
Summary���������������������������������������������������������������������������������������������������������������������������������� 478

Index��������������������������������������������������������������������������������������������������������������������� 481

viii
About the Author
Anthony Giretti is a senior lead software developer at OneOcean in Montreal, Canada.
He is a technical leader and four-time Microsoft MVP award recipient. Anthony
specializes in web technologies (17 years’ experience) and .NET. His expertise in
technology and IT, and a heartfelt desire to share his knowledge, motivates him to dive
into and embrace any web project, complex or otherwise, in order to help developers
achieve their project goals. He invites challenges such as performance constraints, high
availability, and optimization with open arms. He is a certified MCSD who is passionate
about his craft and always game for learning new technologies.

ix
About the Technical Reviewer
Fiodar Sazanavets is an experienced full-stack lead software
engineer who mainly works with the Microsoft software
development stack. The main areas of his expertise include
ASP.NET (Framework and Core), SQL Server, Azure, Docker,
Internet of Things (IoT), microservices architecture, and
various front-end technologies.
Fiodar has built his software engineering experience
while working in a variety of industries, including water
engineering, financial, retail, railway, and defense. He has
played a leading role in various projects and, as well as
building software, his duties have included performing architectural and design tasks.
He has also performed a variety of technical duties on clients’ sites, such as in-house
software development and deployment of both software and IoT hardware.
Fiodar is passionate about teaching other people programming skills. He has
published a number of programming courses on various online platforms.
Fiodar regularly writes about software development on his personal website,
https://scientificprogrammer.net. He has also published a number of articles on
other websites.

xi
Acknowledgments
The completion of this book could not have been possible without the participation and
assistance of many people and I would like to express my special thanks to them.
First, thanks to Camille Viot, my boss, for accommodating me so that I could
overcome this immense challenge.
Next, I would like to thank my friend Dave Brock (Madison, Wisconsin) for both
his moral but technical support; he was a great help when I felt overwhelmed by the
magnitude of the task. I also thank him for reviewing my chapters one by one—many
thanks for his contribution! Thanks also to Damien Vande Kerckhove for his technical
support, which allowed me to adjust the shot when I was not going in the right direction.
He was also an essential asset for ensuring this book was able to see the light of day.
I also thank all my family for their unwavering support. Finally, I would like to thank
a special member of my family that I unfortunately lost recently; he was there every night
next to me when I was writing my lines. Thank you, Ulysse, you helped me so much and
kept me company.

xiii
Introduction
Take a new technological turn with gRPC and ASP.NET Core while discovering .NET 6,
the latest release of the Microsoft .NET platform, and C# 10.
gRPC has become more and more famous because of its performance compared to
JSON/XML APIs. In this book, you’ll discover how to develop ASP.NET Core APIs with
the gRPC specification, and gRPC will no longer be mysterious to you.
After you discover how gRPC works, you’ll learn how to use it to build high-­
performance web applications with the best development standards. You’ll use gRPC
with various ASP.NET Core 6 project types such as Razor Pages and minimal APIs. You’ll
also discover gRPC-web and the great mix it does with Angular 12.
For Windows Communication Foundation (WCF) developers, you will learn how to
migrate from WCF to gRPC by comparing the similarities and differences between the
two frameworks.
We’ll also explore using gRPC and gRPC-web with OpenId Connect authentication
and authorization to secure your applications.
Let’s go!

xv
PART I

Getting Started with .NET 6


CHAPTER 1

Welcome to Modern .NET


.NET is 20 years old, having been introduced in 2002 with the release of the .NET
Framework, .NET 1. Since then, it has evolved with the needs of the computing industry
to become even faster, lightweight, and cross-platform. As I write this book, we are
at a crossroads, if you will, of the original .NET Framework and the newer .NET Core
framework coming together under one new .NET. Microsoft has recently released .NET 5
and .NET 6 in November 2021, and with it, you can build powerful web applications with
ASP.NET Core 6.
For those of you who are already .NET developers, feel free to skip this chapter. For
the rest of you, this chapter is designed to give you just enough history and background
to provide some foundation for your learning moving forward. We’ll cover the
following topics:

• A brief history of .NET

• Modern .NET, a unified platform

• .NET schedule and what it means

• How to explore .NET 6


• Recap of C# 9 and introduction to C# 10

A Brief History of .NET


A .NET application is developed for and runs in one or more implementations of .NET.
Implementations include the .NET Framework, .NET Core, Mono, .NET 5 and now
.NET 6. There is an API specification common to several implementations of .NET,
called .NET Standard. This section introduces these concepts.

3
© Anthony Giretti 2022
A. Giretti, Beginning gRPC with ASP.NET Core 6, https://doi.org/10.1007/978-1-4842-8008-9_1
Chapter 1 Welcome to Modern .NET

. NET Framework
Since Microsoft’s release of .NET 1, there have been nine releases of the .NET
Framework, with seven of them released with a new version of Visual Studio. Two
of these releases, .NET Framework 2.0 and .NET Framework 4.0, have upgraded the
Common Language Runtime (CLR), which runs .NET applications. When the CLR
version is the same, new versions of the .NET Framework replace older versions. .NET
Framework 4.8 is the latest version of the .NET Framework. Table 1-1 shows .NET
Framework releases from .NET 1 to .NET 4.8.

Table 1-1. All .NET Framework Versions Released


Version Release Date Visual Studio Version

1.0 (major version) 2/13/2002 VS.NET


1.1 (minor version) 4/24/2003 VS.NET 2003
2.0 (major version) 11/7/2005 VS 2005
3.0 (major version) 11/6/2006 VS 2005
3.5 (major version) 11/19/2007 VS 2008
4.0 (major version) 4/12/2010 VS 2010
4.5 (major version) 8/15/2012 VS 2012
4.5.1 (minor version) 10/17/2013 VS 2013
4.5.2 (minor version) 5/5/2014 VS 2015
4.6 (major version) 7/20/2015 VS 2015
4.6.1 (minor version) 11/30/2015 VS 2015
4.6.2 (minor version) 8/2/2016 VS 2017
4.7 (major version) 4/5/2017 VS 2017
4.7.1 (minor version) 10/17/2017 VS 2017
4.7.2 (minor version) 4/30/2018 VS 2017
4.8 (major version) 4/18/2019 VS 2019

4
Chapter 1 Welcome to Modern .NET

The .NET Framework was designed to develop Windows-only applications, as


Windows is heavily reliant on the .NET Framework. Its successor, .NET Core, changed
that by becoming open source software and providing cross-platform support.

. NET Core
In June 2016, Microsoft announced the .NET Core project, an open source, cross-
platform successor with compatibility for Windows, macOS, and Linux. Since then,
Microsoft has released two significant versions, .NET Core 2.0 and .NET Core 3.0, both
of which have minor releases associated with them. .NET Core 3.1 is the latest version of
.NET Core and will be supported until December 2022. Table 1-2 shows the .NET Core
releases since 2016.

Table 1-2. All .NET Core Versions Released


Version Release Date Visual Studio Version

.NET Core 1.0 (major version) 6/27/2016 VS 2015


.NET Core 1.1 (minor version) 11/16/2016 VS 2017
.NET Core 2 (major version) 8/14/2017 VS 2017
.NET Core 2.1 (minor version) 5/30/2018 VS 2017
.NET Core 2.2 (minor version) 12/4/2018 VS 2019
.NET Core 3.0 (major version) 9/23/2019 VS 2019
.NET Core 3.1 (minor version) 12/3/2019 VS 2019

In addition to .NET Core and .NET Framework, Microsoft also maintains the Mono
project, an open source implementation of Microsoft’s .NET Framework. Launched in
2004 to allow developers to create cross-platform applications easily, it’s based on the
European Computer Manufacturers Association (ECMA) standards for C# and the CLR.

Note ECMA is a European nonprofit organization responsible for defining IT


standards, both for hardware and software (programming languages), ECMAScript
being the most famous standard developed by this organization. ECMA is also
known for having developed the Near Field Communication (NFC) standard.

5
Chapter 1 Welcome to Modern .NET

When it comes to API surface area, .NET Core 3 is not as robust as .NET Framework
4.8, a mature platform with a 15-year head start. However, Microsoft has added about
50,000 .NET APIs to the .NET Core platform to date. To continue closing this gap, Microsoft
has built on the efforts made with .NET Core and taken the best of Mono to create a unique
platform that you can use for all your .NET programs: .NET 5 and so on with .NET 6.
Microsoft has named this new version simply .NET 5 (and then .NET 6) so as not to
confuse developers, because it’s not the successor to .NET Framework 4.8.

. NET Standard
In 2011, Microsoft released the Portable Class Libraries (PCL), which are binaries that are
compatible with many frameworks. PCLs were a significant improvement because they
were supported by several runtimes such as Mono, Universal Windows Platform (UWP),
and .NET. In the meantime, it was hard to find information on what APIs were available
or not. To help with this confusion, .NET Standard was born.
.NET Standard is a bunch of APIs implemented by the Base Class Library (BCL).
It’s a specification of .NET APIs that proposes a unified set of contracts that you can
compile in your compatible projects. These contracts are implemented in several
.NET implementations. Various .NET implementations target specific versions of .NET
Standard. Table 1-3 shows the minimum implementation versions that support each
.NET Standard version.

Table 1-3. All .Net Standard Versions Supported by .NET Implementations


.NET Standard Versions 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0 2.1

.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 3.0 3.1
.NET Framework 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1 N/A
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 5.4 6.4
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.14 12.16
Xamarin.Mac 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.8 5.16
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 8.0 10.0
UWP 10.0 10.0 10.0 10.0 10.0 10.0.x 10.0.x 10.0.x N/A
Unity 2018.1 2018.1 2018.1 2018.1 2018.1 2018.1 2018.1 2018.1 N/A

6
Chapter 1 Welcome to Modern .NET

.NET 6 implements .NET Standard 2.1 (and earlier), which is not deprecated, but
.NET 6 (unified across platforms) is the new Microsoft implementation of .NET to share
code between .NET projects.

Modern .NET: A Unified Platform


Released in November 2020, .NET 5 is the next major evolution of .NET after .NET Core.
The later has been followed by .NET 6 released in November 2022. You can now create
various applications with the same runtime, allowing uniformity in the execution behaviors
of your .NET applications, all with a homogeneous development experience (single code
base). Therefore, code in your applications and your project files will look similar regardless
of the type of your project. To make all this possible, .NET 5 & NET 6 combines the best of
.NET Core and Mono. Figure 1-1 shows the unified ecosystem of .NET 5. In November 2021,
.NET 6 has came and offers everything that has been brought by .NET 5 plus huge features
like Multi-platform App UI (MAUI) and ahead-of-time (AOT) compilation.

Figure 1-1. .NET 5/6 unified ecosystem (source: Microsoft)

Note .NET 5 was released after this diagram was released. Since then, Microsoft
pushed the launch of Xamarin in the .NET unified platform to .NET 6.

7
Chapter 1 Welcome to Modern .NET

M
 ono and CoreCLR
We’ll discuss two different development experiences with .NET: .NET with Mono and
.NET with CoreCLR.

D
 ifferences and Commonalities
Mono is the cross-platform implementation of .NET. It started as an open source
alternative to the .NET Framework and made the transition to targeting mobile devices
like iOS and Android much easier. Mono is the runtime used to run Xamarin. Mono
allows developers to run .NET applications cross-platform (even older game consoles
such as PlayStation 3 and Xbox 360) and provides powerful development tools for Linux.
Core Common Language Runtime (CoreCLR) is the runtime used as part of .NET Core.
.NET Core and Mono have a lot of similarities but also many differences. As a
developer, you have the capability to select the desired development experience you
want while making the switch from one to the other as straightforward as possible.

JIT
Since the beginning of .NET, .NET was based on a just-in-time (JIT) compiler to translate
Intermediate Language (IL) code into optimized code. Microsoft built an efficient,
high-performance runtime that made programming easy and efficient.
The default experience for most .NET 6 applications will use the JIT-based CoreCLR
runtime, but there are exceptions: Xamarin and Blazor WebAssembly. Microsoft delivers
AOT compilation for both projects in .NET 6.

Note AOT support has been planned for .NET 5 but finally postponed to .NET 6.

AOT
The Mono compiler is an AOT compiler that allows you to compile native code that can
be executed everywhere. The Blazor project uses Mono AOT compilation since .NET 6.
However, AOT compilation is required for Xamarin (Android/iOS) and gaming consoles
(Unity). AOT compilation is mostly intended for applications that need a quick start and
a small footprint.

8
Chapter 1 Welcome to Modern .NET

The Best of Both Worlds


Microsoft will invest effort in improving throughput and reliability in CoreCLR while
working further to improve bootability and memory consumption with the Mono AOT
compiler.
Since the effort is not identical in these aspects, this doesn’t mean that the
investment in others will be different. For example, the diagnostic capabilities must be
the same on .NET 6 for all kinds of diagnostics.
Finally, all .NET 6 applications will also build with the .NET command-line interface
(.NET CLI), providing developers the same command-line tools.

.NET Schedule and What It Means


.NET 6 will be supported in the long term (LTS release), unlike .NET 5, which is why many
companies have waited for .NET 6 instead of jumping on .NET 5. Only even-numbered
versions will be supported in the long term. Finally, Microsoft plans to release no (or
few) minor versions, and instead intends to release a major version of .NET once a year.
Figure 1-2 shows Microsoft’s .NET release cadence.

Figure 1-2. .NET release cadence (source: Microsoft)

To stay informed about upcoming releases, support information, and .NET release
schedules, visit the Microsoft page “.NET and .NET Core Support Policy”: https://
dotnet.microsoft.com/platform/support/policy/dotnet-core.

How to Explore .NET 6


While this chapter aims to introduce you to .NET 6, this book will not cover this
framework in detail. The primary focus of this book is to help you learn how to begin
using gRPC and ASP.NET Core 6. However, I will list some notable improvements made

9
Chapter 1 Welcome to Modern .NET

since .NET Core 3.1 and explain why they are so good, then show you how to install .NET
6 so you can take full advantage. Because .NET 5 is a lightweight version of .NET 6, I will
recap what .NET 5 introduced so that you understand why .NET 6 and its improvements
make it a modern .NET platform.

.NET 5 and 6 Improvements


Before .NET 5, Microsoft was responsible for maintaining about 100 repositories
between ASP.NET Core, .NET Core, and Entity Framework Core—making things quite
difficult. Microsoft has significantly simplified this by offering three consolidated
repositories; if you want to find out more about .NET 6 (or even contribute to the open
source projects), you can visit the following repositories, which will make it easier for you
to understand what’s going on and what you can do if you want to contribute:

• The runtime, which combines the previous repositories dotnet/


corefx, dotnet/coreclr, and dotnet/core-setup (https://github.com/
dotnet/runtime)

• ASP.NET Core, which combines several repositories from the ASP.


NET organization (https://github.com/dotnet/aspnetcore)

• The .NET SDK, which combines the previous repositories dotnet/sdk


and dotnet/cli (https://github.com/dotnet/sdk)

In terms of performance, .NET 5 has several huge improvements, which makes .NET
6 (and 5) significantly faster:

• Much more efficient machine code generated by the JIT compiler.


While I can’t list them all here, the following is the GitHub repository
if you want to know more: https://github.com/dotnet/runtime

• Many improvements to the garbage collector (GC).

• Improved HTTP/1.1 and HTTP/2 performance.

• Improved performance of extensions on strings (two to five times


faster).
• Performance improvement for ARM64-type processors.

• Reduction in the size of container images such as Docker.

10
Chapter 1 Welcome to Modern .NET

The list of other improvements is too extensive to include here. However, you can
check out the interesting links on Microsoft’s blog detailing their announcements as the
previews were released: https://devblogs.microsoft.com/dotnet/.
Regarding .NET 6 specifically, here is what it offers:

• Support of HTTP/3, which offers development opportunities in the


web world

• Unification of Xamarin through MAUI, which provides a unified .NET


experience across many devices

• AOT compilation in MAUI and Blazor, which makes applications


faster because the code is not compiled at the first application
execution (which can cause slowness)

• Hot reload, which allows you to modify your code without restarting
your app, making the development experience faster

Get Started with .NET 6


Now let’s take a quick tour of .NET. Before we get started, you will want to set up
your environment. If you haven’t already done so, go ahead and download Visual Studio
2022 from here: https://visualstudio.microsoft.com/vs/. The latter included all
what you need to get started, even the .NET 6 SDK.
Now that you have your environment set up, let’s begin by looking at the templates
you can use in Visual Studio 2022. Figure 1-3 shows the main Visual Studio project
creation window with all available project types.

11
Chapter 1 Welcome to Modern .NET

Figure 1-3. Visual Studio 2022 main project creation window

Visual Studio 2022 introduced a great context menu to choose the language,
the project type, and the platform you want to use for your new project, as shown in
Figure 1-4.

12
Chapter 1 Welcome to Modern .NET

Figure 1-4. Visual Studio’s 2022 context menu

If you prefer, you can also use the .NET CLI to get the same information by opening a
terminal window and entering the following:

dotnet new –-list

The output of this command is shown in Figure 1-5.

13
Chapter 1 Welcome to Modern .NET

Figure 1-5. All available project types and languages from the command line

Personally, I like both ways to create a project. Both are simple. Let’s now create a
new project named MyMVCApp, where -o allows to specify the project name (and its
folder name), which uses an ASP.NET MVC template with the command as seen here:

dotnet new mvc -o MyMVCApp

The command output is shown in Figure 1-6.

14
Chapter 1 Welcome to Modern .NET

Figure 1-6. The output generated after creating a new project with the .NET CLI

To confirm your project is set up to use .NET 6, you can build it by running the
following command:

dotnet build

Or, if you want to build and run your project, you can use the following command:

dotnet run

You can integrate the new Windows Terminal with Visual Studio. To enable it in
Visual Studio 2022, click the View menu and choose Terminal, as shown in Figure 1-7.

15
Chapter 1 Welcome to Modern .NET

Figure 1-7. Enabling the new Windows Terminal in Visual Studio 2022

Once completed, the terminal window appears in the bottom panel. Then, you’ll be
able to run any command you want—such as PowerShell, Git, and CLI commands, as
shown in Figure 1-8.

16
Chapter 1 Welcome to Modern .NET

Figure 1-8. Running a command in the terminal window

It’s is my favorite feature because I don’t need to open a new window on my


computer. I don’t know about you, but I find it a bit annoying to deal with multiple
windows. On Visual Studio, no problem! The Terminal is integrated into the existing
menu, positioned by default at the bottom of the menu, and you can easily drag it and
drop it elsewhere!

Recap of C# 9 and Introduction to C# 10


We can’t discuss the C# language without mentioning the latest updates with C# 9 and
C# 10. Although this isn’t a C# programming book, I’ll help you discover the new features
because most of my examples use C# 9 and C# 10 features. Going into detail about each
version of C# is beyond the scope of this book, so I strongly recommend that you visit
this web page that describes all the C# versions and their main features: https://docs.
microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history.

Recap of C# 9
Here are the most important improvements introduced in C# 9:

• Init-only properties

• Records

• Improved pattern matching


17
Chapter 1 Welcome to Modern .NET

• Improved target typing

• Covariant returns

• Static anonymous functions

I nit-Only Properties
C# 9 introduced an init accessor, a variant of the set accessor. This accessor allows
properties to be assigned once during object initialization. If you apply this accessor to
all the properties of your object, it makes the object immutable. If you try to reassign a
property initialized with this accessor, the compiler will warn you of an error. Listing 1-1
shows an example of a Product class with its immutable CategoryId property; this code
could be created in any C# project.

Listing 1-1. Product Class with CategoryId Property and Its init Accessor

using System;
namespace CSharp9Demo.Models
{
    public class Product
    {
        public string Name { get; set; }
        public int CategoryId { get; init; }
    }
}

R
 ecords
C# 9 added a new record keyword. A record makes it possible to create an immutable
reference type object (either with the init accessor or a primary constructor) and give it
a value type object for comparison. Listing 1-2 shows an immutable record with init-
only properties, and Listing 1-3 shows an immutable record with a primary constructor.

18
Chapter 1 Welcome to Modern .NET

Listing 1-2. Immutable Product Record with init-Only Properties

using System;
namespace CSharp9Demo.Models
{
    public record Product
    {
        string Name { get; init; }
        int CategoryId { get; init; }
    }
}

Listing 1-3. Immutable Product Record with a Primary Constructor

using System;

namespace CSharp9Demo.Models
{
    public record Product(string Name, int CategoryId);
}

Suppose you want to create a new object from another object because the new object
requires all but one of the same property values. Unfortunately, your existing object is
immutable. The with keyword fixes that. It allows you to create an object from another
object and specify which properties to change; Listing 1-4 shows an example of the usage
of the with keyword.

Listing 1-4. Example of the Use of the with Keyword

var product = new Product


            {
                Name = "VideoGame",
                CategoryId = 1
            };

var newProduct = product with { CategoryId = 2 };

19
Chapter 1 Welcome to Modern .NET

Interestingly, the record keyword makes the virtual Equals method overridden
and allows value-based comparison between records. On that point, it behaves as a
struct, but it’s not. Records may be appreciated for that possibility. Listing 1-5 shows an
example of a comparison between two records.

Listing 1-5. Records Comparison

var product = new Product


{
    Name = "VideoGame",
    CategoryId = 1
}

var anotherProduct = new Product


{
    Name = "VideoGame",
    CategoryId = 1
};

product.Equals(anotherProduct); // returns true

I love that feature, and I try to use the record keyword as much as I can. I often use
it on Data Transfert Object (DTO) to carry data between layers because they must not
mutate, and I can enforce immutability easily

Improved Pattern Matching


First introduced with C# 6, pattern matching has evolved. C# 8, released in 2019, brought
many pattern-matching improvements. Miguel Bernard has an excellent article on
the C# 8 improvements: https://blog.miguelbernard.com/pattern-matching-in-
csharp/. If you want a primer on the C# 8 features, check out his great series here:
https://blog.miguelbernard.com/csharp-8-0-new-features/.
C# 9 allows you to use relational patterns, enabling the usage of <, >, <=, and >=, and
allows you to use logical operators such as and, or, and not—and the great thing is they
can be combined!
Listing 1-6 shows a tax selector depending on the CategoryId property of a
Product object.

20
Chapter 1 Welcome to Modern .NET

Listing 1-6. Tax Selector Using C# 9 Improved Pattern Matching

using System;

namespace CSharp9Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            var product = new Product { Name = "Food", CategoryId = 4 };
            GetTax(product); // Returns 5
        }

        // Relational pattern combined with logical patterns


        private static int GetTax(Product p) => p.CategoryId switch
        {
            0 or 1 => 0,
            > 1 and < 5 => 5,
            > 20 => 15,
            _ => 10
        };
    }

    public class Product


    {
        public string Name { get; set; }
        public int CategoryId { get; set; }
    }
}

The not pattern is also making an appearance—you’ll see the not logical
operator can also be used in an if statement (it also works with a ternary statement).
Listing 1-7 shows a discount selector based on an object type, ElectronicProduct,
which is a Product child object.

21
Chapter 1 Welcome to Modern .NET

Listing 1-7. Discount Selector Using the not Pattern

using System;

namespace CSharp9Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            var product = new Product { Name = "Food", CategoryId = 4 };
            GetDiscount(product); // Returns 25
            GetDiscountTernary(product); // Returns 25
        }

        // Not pattern


        private static int GetDiscount (Product p)
        {
            if (p is not ElectronicProduct)
                return 25;

            return 0;
        }

        private static int GetDiscountTernary (Product p) => p is not


ElectronicProduct ? 25 : 0;
    }

    public class Product


    {
        public string Name { get; set; }
        public int CategoryId { get; set; }
    }

    public class ElectronicProduct : Product


    {
    }
}

22
Chapter 1 Welcome to Modern .NET

Improved Target Typing


With C# 9, Microsoft improved target typing: “In C# 9.0 some expressions that weren’t
previously target typed become able to be guided by their context” (https://devblogs.
microsoft.com/dotnet/welcome-to-c-9-0/#improved-target-typing).
You can now infer the object type you are instantiating, meaning you don’t have to
write the object type on the right side of the new keyword. You can’t combine it with the
var keyword, but you can combine it with a conditional statement. In other words, you
can’t infer types on both sides of the equal sign.
Listing 1-8 shows an omitted type on instantiating Book and Headset classes and
comparing them with a conditional operator (not allowed before C# 9). Both examples
use Product as a base type.

Listing 1-8. Omitted Type and Conditional Operator Usage on Book and
Headset Objects
namespace CSharp9Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Book aBook = new ("gRPC", 1);
            Headset headset = new ("Logitech", 2);
            Product anotherProduct = aBook ?? headset;
        }
    }

    public class Product


    {
        private string _name;
        private int _categoryId;

        public Product(string name, int categoryId)


        {
            _name = name;

23
Chapter 1 Welcome to Modern .NET

            _categoryId = categoryId;
        }
    }

    public class Book : Product


    {
    }

    public class Headset : Product


    {
    }
}

C
 ovariant Returns
One of the most underrated features of C# 9 is covariant returns. Usually, in C#, when
you inherit from a class, you can override a method if it is declared abstract or virtual,
but you can’t change the return type of this method. C# 9 allows you to do this. In
addition to overriding a virtual or abstract method, you can now return a covariant type
of the initial type declared in the parent class.
Listing 1-9 shows a covariant return usage on the Book class, inheriting from the
Product abstract class. The abstract Order method that returns a ProductOrder object
can be overridden within the Book class by returning a BookOrder object that inherits
from the ProductOrder class.

Listing 1-9. Covariant Return Usage on Order Method of the Book Class

public abstract class Product


{
    protected string Name { get; }
    protected int Id { get; }

    protected Product(string name, int id)


    {
        Name = name;
        Id = id;
    }

24
Chapter 1 Welcome to Modern .NET

    public abstract ProductOrder Order(int quantity);


}

public class Book : Product


{
    public string ISBN { get; }

    
public Book(string name, int categoryId, string Isbn) : base(name,
categoryId)
    {
        ISBN = Isbn;
    }

    
public override BookOrder Order(int quantity) => new BookOrder {
Quantity = quantity, Product = this };
}

public class ProductOrder


{
    public int Quantity { get; set; }
}

public class BookOrder : ProductOrder


{
    public Book Product { get; set; }
}

Static Anonymous Functions


In C# 9, Microsoft introduced an important improvement to anonymous functions by
allowing the static modifier on them, bringing us static anonymous functions! Why?
Because allocation matters! The Microsoft DevBlogs article “Dissecting the local
functions in C# 7” explains as follows why lambdas bring a cost (https://devblogs.
microsoft.com/premier-developer/dissecting-the-local-functions-in-c-7/):

25
Chapter 1 Welcome to Modern .NET

“If you ever work on a performance critical application, then you know that
anonymous methods are not cheap:

• Overhead of a delegate invocation (very small, but it does exist).

• 2 heap allocations if a lambda captures local variable or argument


of enclosing method (one for closure instance and another one for a
delegate itself ).

• 1 heap allocation if a lambda captures an enclosing instance state


(just a delegate allocation).

• 0 heap allocations only if a lambda does not capture anything or


captures a static state.”

Listing 1-10 shows the contextual private property _text captured by the anonymous
function, which can cause unintended allocation consequences.

Listing 1-10. Example of Unintended Memory Allocation on the Contextual


_text Variable
using System;

namespace CSharp9Demo
{
    class Program
    {
        private string _text = "{0} is a beautiful product !";
        static void Main()
        {
            PromoteProduct(product => string.Format(this._text, "Surface
book 3"));
        }

        private void PromoteProduct(Func<string, string> func)


        {
            Console.WriteLine(func(country));
        }
    }
}

26
Chapter 1 Welcome to Modern .NET

C# 9 fixed that. Listing 1-11 shows the fix achieved by applying the const keyword on
the _text variable and by adding the static keyword to the lambda expression.

Listing 1-11. Example of the Unintended Memory Allocation Fix on the


Contextual _text Variable
using System;

namespace CSharp9Demo
{
    class Program
    {
        private const string _text = "{0} is a beautiful product !";
        static void Main()
        {
            PromoteProduct(static product => string.Format(this._text,
"Surface book 3"));
        }

        private void PromoteProduct(Func<string, string> func)


        {
            Console.WriteLine(func(country));
        }
    }
}

T op-Level Programs
C# 9 introduced a fun and practical feature: top-level programs. A top-level program
is the simplest way to write a program on its top level. Concretely in your .NET 5+
applications, you’ll be able to write a lighter Program.cs file. This feature allows you to
remove all enclosing declarations (namespace declaration, Program class declaration,
Main method declaration).
Everything works the same (accessing arguments, making async calls, declaring local
functions, etc.). Listing 1-12 shows a lighter Program.cs file in ASP.NET Core 5 where the
application namespace is named CountryService.Web.

27
Chapter 1 Welcome to Modern .NET

Listing 1-12. Top-Level Programs in ASP.NET Core 5

using CountryService.Web;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

CreateHostBuilder(args).Build().Run();

static IHostBuilder CreateHostBuilder(string[] args) =>


Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    });

Before ASP.NET Core 5, you would have written your Program.cs file as shown in
Listing 1-13.

Listing 1-13. Program.cs File Before ASP.NET Core 5

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace CountryService.Web
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>


            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}
28
Chapter 1 Welcome to Modern .NET

In C# 10, this feature has been improved so that the Startup.cs file is no longer
helpful for the Program.cs file is sufficient on its own, and I’ll show you that in the next
section.

Introduction to C# 10
C# 10 is the major new version of C # shipped with .NET 6, and following on from C# 9, it
brings remarkable changes, not to say a real breakthrough in coding .NET applications.
C# 10 includes the following most important features:

• Global usings

• File-scoped namespaces

• Record struct

• Improved top-level program

G
 lobal Usings
C# 10 brings an attractive feature that will simplify and lighten your C# files: global
usings. What is a global using? It’s simply a manner to declare once a using statement
in a single C# project. In this way, you can create a single file and declare globally all the
needed using statements for your project. This simplifies your code greatly, and you no
longer need to repeat the using statement across files. To declare a using statement as
global, you have to write it like this:

global using AssemblyToImport;

For example, it could give the following as shown on Listing 1-14 if you decide
to declare all usings in a single file. I prefer to name it GlobalUsings.cs, which is
meaningful, and you’ll find this convention in several chapters in this book.

Listing 1-14. Declaring All Necessary Usings in the Same File

global using System;


global using System.Threading.Tasks;
global using System.IO;
global using System.IO.Compression;
global using System.Collections.Generic;

29
Chapter 1 Welcome to Modern .NET

global using System.Linq;


global using Microsoft.Data.SqlClient;
global using Microsoft.EntityFrameworkCore;
global using Microsoft.Extensions.Logging;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Http;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Configuration;

Convenient, isn’t it?

F ile-Scoped Namespaces
Still, to continue with the simplification of the code, I suggest you discover another
feature of C# 10 that you will often review in this book: file-scoped namespaces.
Namespaces declared in a file (without braces, but whose instruction ends with a
semicolon) will apply to all elements declared in the same file. It’s practical, and it
lightens the code. However, there is a limitation: only one namespace can be declared in
the file. I love this new feature of C# 10, and I’m sure you’ll love it too. Listing 1-15 shows
a sample of a file-scoped namespace. The CountryModel class is defined in another file.

Listing 1-15. Example of a File-Scoped Namespace

namespace CountryService.gRPC.Mappers;

public static class CountryReplyMapper


{
    public static CountryReply ToReply(this CountryModel country)
    {
        if (country is null)
            return null;

        var countryReply = new CountryReply


        {
            Id = country.Id,
            Name = country.Name,
            Description = country.Description,

30
Chapter 1 Welcome to Modern .NET

            Anthem = country.Anthem,
            CapitalCity = country.CapitalCity,
            FlagUri = country.FlagUri
        };
        countryReply.Languages.AddRange(country.Languages);

        return countryReply;
    }
}

Combined with the global usings feature, file-scoped namespaces results in much
more readable C# files.

Record struct
In .NET 5 and C# 9, the record keyword is applied only to classes. Starting with .NET 6
and C# 10, the record keyword can be applied to a struct. To avoid confusing the two,
declare a record applied to a class as public record class MyClass and declare a
record applied to a struct as public record struct MyStruct. If you omit the class or
the struct keyword, it will behave as a record class by default. Record struct works like a
record class (with-expressions, equality comparison), except it’s a struct and not a class,
and positional records work differently: positional records on a struct don’t make the
record immutable as a record class. Because it’s a struct, you have to set the readonly
keyword to make the record struct immutable. The major fact with record struct is that
reading/writing performance is higher than a regular struct. Interesting too!

Summary
In this chapter, you were given a primer on modern .NET. You learned about its origins
and why Microsoft made some of the developer choices that it did. You were also given
a quick primer on C# 10 and even a recap of C# 9, whose features often appear in this
book. The next chapter briefly introduces ASP.NET Core 6, which runs on .NET 6.

31
CHAPTER 2

Introducing
ASP.NET Core 6
Microsoft released its first ASP.NET framework in 2002 with ASP.NET Webform. The
years that followed were rich in developments such as ASP.NET MVC, ASP.NET WebAPI,
and SignalR. The framework evolved a little too quickly with new functionalities without
changing its core, more precisely the assembly named System.Web. Very quickly, new
challenges appeared, such as performance, the possibility of running ASP.NET on servers
other than IIS, increasing the framework’s affinity with the cloud to significantly facilitate its
deployment, and greatly improving its configuration by making it more flexible. ASP.NET
Core is born! ASP.NET Core is even designed to support containerization such as Docker.
ASP.NET Core is a complete overhaul of the trendy ASP.NET framework and allows
you to develop four types of applications:

• Web apps

• Web APIs

• Remote Procedure Call (RPC) apps


• Real-time apps

At the time of writing, ASP.NET Core 6 (delivered with .NET 6) is the latest version.
This chapter introduces you to ASP.NET Core 6, as we’ll use it throughout this book.
Note that ASP.NET Core 6 no longer supports ASP.NET WebForms and Windows
Communication Foundation (WCF).
In this chapter, I’ll teach you ASP.NET Core fundamentals and the following
application types:

• ASP.NET Core fundamentals

• ASP.NET Core Web API (web API)

33
© Anthony Giretti 2022
A. Giretti, Beginning gRPC with ASP.NET Core 6, https://doi.org/10.1007/978-1-4842-8008-9_2
Chapter 2 Introducing ASP.NET Core 6

• ASP.NET Core MVC (web app)

• ASP.NET Core Razor Pages (web app)

• ASP.NET Core Blazor (web app)

• ASP.NET Core SignalR (real-time app)

• ASP.NET Core gRPC (Remote Procedure Call app)

• ASP.NET Core minimal APIs (web API)

ASP.NET Core Fundamentals


Before diving into ASP.NET Core, let’s talk about the fundamentals. Once you know the
fundamentals of ASP.NET Core, you can use this knowledge to build any web application
you’d like, including gRPC.
For an ASP.NET Core application, the entry point of the application is the Program.
cs file, an example of which is shown in Listing 2-1. In this file, you start creating
your application by instantiating a WebApplicationBuilder with the static method
WebApplication.CreateBuilder. The WebApplicationBuilder allows customization by
adding the desired components (configuration) and activating them (activations).

Listing 2-1. Example of Program.cs File

var builder = WebApplication.CreateBuilder(args);


var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Note This is the default Program.cs file generated from the ASP.NET Core 6
template. It implements the C# 9 top-level programs feature (introduced in Chapter 1).
The same remark applies to using statements, and the default ASP.NET Core 6
template uses the C# 10 global usings feature (also introduced in Chapter 1).

34
Another Random Document on
Scribd Without Any Related Topics
omnium oppidulorum consilio, quum in unam omnes urbem coirent,
dedicatum est eo in loco, qui nunc Acropolis (arx), tum vero Polis
(urbs) nominabatur. Delapsum quidem de cœlo fama vulgavit: sed
mihi id neque affirmare, neque refellere in præsentia in animo est.
Lucernam ex auro deæ Callimachus fecit: (7) in quam oleum
infusum (id quod semel quotannis faciunt) non consumitur, nisi
exacto demum anno, quum tamen lucerna dies noctesque ardeat. Id
ideo evenit, quod lucernæ inest e lino Carpasio funiculus, quod linum
unum ex omnibus igni non conficitur. Eminet supra lucernam palma
ænea: quæ quum ad lacunar consurgat, exceptum vaporem facile
dissipat. Callimachus vero ipse, qui lucernam fecit, etsi multo est
infra summos artifices, sollertia tamen ceteris longe præstitit: primus
enim lapides terebravit: nomen vero Cacizotechnos (quasi dicas, sui
in arte calumniator) aut sibi ipse imposuit, aut ab aliis impositum
usurpavit.

CAPUT XXVII.

De donariis in templo Poliadis Minervæ — de ejus olea — virginibus Canephoris in


sacris Minervæ — Tolmidis signo ejusque rebus gestis — aliis signis — de
quibusdam ad Herculem et Theseum pertinentibus — de Minoe et Minotauro.
Erectus est autem in Poliadis delubro Mercurius ligneus (fuisse aiunt
Cecropis donarium), per myrti ramos non conspicuus. Inter
vetustissima donaria, quorum mentio fiat digna sunt lecticaria sella
compactilis, Dædali opus, et de Persarum spoliis Masistii, qui ad
Platæas equitum dux fuit, lorica, et acinaces, qui Mardonii fuisse
dicitur. Masistium quidem ab Atheniensium equitatu interemptum
scimus: Mardonius vero in acie contra Lacedæmonios dimicans, a
Spartano milite est interfectus; ejus igitur acinacen aut omnino non
sustulissent Lacedæmonii, aut certe sublatum Athiensibus non
concessissent. (2) De olea vero aliud nihil memorant, nisi esse eam
Minervæ de Attica certaminis monumentum. Addunt, incensa a
Persis urbe conflagrasse oleam, sed eodem die in duûm cubitûm
proceritatem germinasse. Cum Minervæ templo Pandrosi ædes
conjuncta est, quæ sola ex sororibus fidem in deposito servavit. (3)
Jam vero, quæ magnæ mihi sunt admirationi neque apud omnes
vulgata, ea, uti se habent, exponam. Virgines duæ non longe a
Poliados templo habitant: eas Athenienses arrhephoros (Cistiferas)
appellant. Hæ certum tempus apud deam commorantur: deinde ubi
festus ejus dies advenit, per noctem capite tollunt, quæ illas
Minervæ sacerdos ferre jusserit, quum neque ipsa, quid ferendum
det, neque virgines, quid ferant, sciant. Est in urbe septum
quoddam, non longe a Veneris, quæ in Hortis dicitur, et per idem in
nativam specum quandam descensus: ibi descendentes virgines illæ
onus deponunt, et pro eo aliud item velatum et occultum tollunt: et
has quidem in posterum ex eo tempore missas faciunt: sed pro illis
totidem alias, quas in arcem adducant, capiunt. (4) Ad Minervæ
templum anus est Eueris, cubitali fere altitudine: quam inscriptio
Lysimachæ ministram esse dicit. Sunt etiam ex ære signa duo
grandia, virorum ad pugnam distantium: eorum alterum Erechtheum
appellant, alterum Eumolpum: neque tamen ignorant Atheniensium
qui res priscas norunt, Immaradum esse hunc Eumolpi filium, quem
Erechtheus occiderit. (5) In basi etiam statuæ sunt, Entus (?), qui
vates Tolmidæ fuit, Tolmides etiam ipse, qui Atheniensium classis
dux et alios magnis affecit incommodis, et in primis Peloponnesiorum
maritimum agrum excursionibus infestum reddidit. Idemque
Lacedæmoniorum ad Gytheum navalia incendit; finitimos dein
adortus, Bœas et Cytheriorum insulam cepit. Quum in Sicyoniorum
deinde finibus escensionem fecisset eos, qui armis, quominus agrum
popularetur, impedire conati sunt, ad urbem repulit. Inde Athenas
reversus, in Eubœam et Naxum cleruchos (colonos) Athenienses
deduxit. Idem, cum exercitu in Bœotos impetu facto, agros late
depopulatus est. Capta mox per obsidionem Chæronea, in
Haliartiorum fines excurrit: ubi et ipse dimicans cecidit, et copiæ ejus
omnes fusæ fugatæque sunt. Atque hæc quidem de Tolmide
comperta habeo. (6) Exstant prisca Minervæ signa, quæ sane
integra manserunt, decolorata tamen fumo, et quæ ictum omnino
nullum valeant sustinere. Ad ea enim flamma pervasit, quo tempore,
quum naves conscenderent Athenienses, urbem, quam militaris ætas
deseruerat, Xerxes occupavit. Spectatur et apri venatio: parum vero
mihi liquet, an is Calydonius aper sit. Cycni etiam cum Hercule
pugna. Ab hoc quidem Cycno et alios interemptos ferunt, et Lycum
Thracem, propositis de singulari certamine præmiis: ad Peneum
autem amnem ab Hercule est ipse interfectus.
7. Atque eorum quidem, quæ de Theseo Trœzenii commemorant,
hoc est: Herculem Trœzenem ad Pittheum venisse: quumque
accumbere vellet, leonis pellem deposuisse: accessisse et alios
Trœzeniorum pueros, et Theseum annum agentem ferme septimum:
ceteros, ut leonis pellem viderunt, perterritos aufugisse: Theseum,
nihil magnopere metuentem, paulisper egressum esse, abreptaque
de servorum manibus bipenni, quod viventem leonem esse putaret,
invadere illum voluisse. (8) Et hæc quidem de Theseo prima apud
Trœzenios historia vulgata est. Alteram adjiciunt: crepidas Ægeum
sub saxo et ensem deposuisse, quibus signis filium postea agniturus
esset; ac deinde Athenas reversum: Theseum, quum jam sextum
decimum ætatis annum attigisset, amoto saxo depositum sublatum
Ægeo attulisse. Res tota ex ære, præter saxum, in arce expressa
est. (9) Etiam aliud Thesei facinus memoriæ commendarunt, de quo
hujusmodi narratur historia. Cretensium agrum quum alium, tum
eum, qui Tethrini (?) amni adjacet, taurum infestum reddidisse.
Fuerunt autem priscis temporibus belluæ hominibus formidolosiores.
Cui rei testimonio sunt Nemeæus et Parnassius leo: dracones in
pluribus Græciæ locis: apri etiam, Calydonius atque Erymanthius, et
in Corinthiorum finibus Crommyonius. Eadem de causa feras illas
dicebant partim terram protulisse, partim diis fuisse sacras;
nonnullas etiam ad homines plectendos exstitisse. Taurum igitur
hunc Cretenses Neptuni ira immissum in suos agros memorant, quod
Minos late mari toti, quod Græciam alluit, imperans nihilo quam
ceteris diis Neptuno majorem honorem habuisset: (10) e Creta vero
eundem taurum in Peloponnesum transportatum esse, unumque
fuisse hunc de duodecim Herculis laboribus. In Argivorum vero
campos dimissum, per Corinthiacum Isthmum in Marathoniam Atticæ
regionem fugisse: ibi inter alios multos quos casus obtulerat, Minois
etiam filium Androgeum interemisse; Minoem vero, quum id
Atheniensium fraude accidisse sibi persuaderet, comparata classe
Athenas oppugnatum venisse, ac non prius Athenienses vexare
desiisse, quam se pacti essent pueros septem ac totidem virgines in
Cretam missuros, qui Minotauro, quem Minos in Labyrinthio Gnosi
incluserat, traderentur. Marathonium vero taurum postea Theseum
fama est in arcem egisse, atque ipsi deæ mactasse: cujus rei
imaginem Marathoniorum populus dedicavit.

CAPUT XXVIII.

De Cylone — Minervæ signo ex bellica præda — muris Acropolis — Panis cultu —


Areopago et memorandis in eo — aliis dicasteriis Atheniensium eorumque
originibus.
At Cylonem cur dignum putarint cui æneam statuam ponerent,
comperti nihil habeo, quum de tyrannide eum consilia inisse constet.
Habitum tamen hunc illi honorem conjicio, quod et formæ dignitate
præstiterit, et gloria fuerit minime vulgari: nam in Olympia victor de
iterato stadio renunciatus est, et Theagenis Megarensium tyranni
filiam in matrimonio habuit. (2) Præter ea vero, quæ adhuc recensui,
duo sunt ex bellicæ prædæ decimis insignia apud Athenienses
opera: de Persarum, qui in Marathoniorum fines invaserant, manubiis
Minervæ ex ære signum, quod Phidias fecit: in cujus clypeo
Lapitharum et Centaurorum pugnam Mys cælavit, quum eam Myi, et
quæ in clypeo spectantur reliqua, Parrhasius Euenoris filius pinxisset.
Hastæ cuspis et in summa galea crista hujus Minervæ a Sunio usque
adnavigantibus conspicua est. De Bœotiorum vero et Chalcidensium,
qui in Eubœa sunt, decimis æneus currus positus est. Duo præterea
dona dedicarunt, Periclem Xanthippi filium, et, quæ omnium Phidiæ
operum spectatu dignissimum, Minervam: quam, quod a Lemniis
dedicata est, Lemniam appellant. (3) Arcem ipsam, præter eam
partem, quam Cimon Miltiadis filius exstruxit, muris cinxisse Pelasgos
homines tradunt, qui sub arce quondam habitarunt: Agrolam enim et
Hyperbium ** de quibus quum sciscitarer, aliud nihil comperi quam e
Sicilia eos in Acarnaniam (?) migrasse.
4. Quum jam descenderis, non tamen ad inferiores urbis partes, sed
paulo infra propylæa, fontem videas, et illi propinquum Apollinis et
Panos fanum in specu, in quo cum Creusa Erechtei filia Apollinem
concubuisse fama vulgavit. De Pane vero hæc memoriæ prodita
sunt: nuncium ad Lacedæmonios de Persarum in Atticam irruptione
Phidippidem missum: hunc, quum rediisset, retulisse, Lacedæmonios
minus mature copias educere, quod religione impedirentur cum
exercitu exire, antequam luna orbem complesset: sibi vero ad
Parthenium saltum Panem obvium factum, qui se Atheniensibus pro
sua erga eos benevolentia in pugna ad Marathonem præsto futurum
pollicitus fuerit. Ex eo nuncio deo honores haberi cœptos. (5) In qua
parte est etiam Areopagus (Martis collis): inde autem nomen accepit,
quod Mars in eo loco primus capitis causam dixerit. Nam et
Halirrhothium ab eo occisum, et qua de causa, ante exposuimus.
Sed et postea Oresti de matris cæde judicium constitutum ferunt,
exstatque adhuc Minervæ Areæ ara, quam absolutus dicitur
dedicasse. Lapides ibidem duo sunt rudes, quibus accusatores et rei
insident; alterum Contumeliæ, Impudentiæ alterum vocant. (6)
Proxime dearum est ædes, quas Athenienses Semnas (severas),
Hesiodus in Theogonia Erinyes nominat. Earum serpentibus esse
crinem implicitum, primus omnium finxit Æschylus. Nihil tamen vel
harum, vel ceterorum, quæ illic posita sunt, inferorum numinum
simulacra quicquam horribile præ se ferunt. Sunt vero Plutonis,
Mercurii et Telluris signa: ad quæ rem divinam faciunt quicunque in
Areopagi judicio capitis periculo fuerint liberati: sed alii etiam, quum
hospites, tum cives. (7) Intra septum Areopagi Œdipi quoque
monumentum est, de quo quum sedulo quærerem, ejus ossa Thebis
eo deportata comperi. Quæ enim de Œdipi morte Sophocles finxit,
Homerus facit quo minus vera fuisse credam: ab eo enim traditum
scimus, Mecisteum Thebas profectum, iis ludis, qui ad Œdipi
tumulum facti sunt, decertasse.
8. Sunt apud Athenienses etiam alia judicia, sed minus illustria:
eorum unum Parabystum (absconsum), alterum Trigonum
(triquetrum) nominant. Illud ab obscuro urbis loco, in quo levissimæ
prorsus causæ cognoscuntur: hoc a loci forma nomen assumsit.
Batrachii vero et Punicei a coloribus in hunc usque diem nomina
permansere. Maximum vero omnium, et quo frequentissimi
conveniunt, Heliæam vocant. Eorum quæ de cæde sunt unum «ad
Palladium» appellant, ubi involuntariæ quoque cædis causæ
agitantur. Atque in eo quidem primum Demophontem causam dixisse
nemo ambigit: cujus vero is criminis reus fuerit, non satis inter
omnes convenit. (9) Diomedem quidem tradunt, Ilio capto, quum in
patriam reveheretur, per noctem ad Phalerum appulisse. Ubi quum
Argivi, qui cum eo erant, in agrum tanquam hostilem excurrerent, ut
qui aliam quam Atticam terram inter tenebras crederent,
Demophontem aiunt, et ipsum nescientem Argivorum eam classem
esse, ad propulsandas populationes accurrisse. Quumque, aliquot
interfectis, Palladio erepto, domum abiret, ab ejus equo Atheniensem
hominem, quum parum is prospiceret, subversum elisumque
interiisse. Demophontem itaque alii ab ejus, qui interfectus fuerat,
propinquis, alii vero ab Argivorum republica reum factum memorant.
(10) In Delphinio causam dicunt qui se jure occidisse defendunt: quo
judicio et Theseus, quum Pallantem ejusque filios res novas
molientes interemisset, absolutus est. Ante Theseum autem
interfectorem necesse erat exilii causa solum vertere, aut talionis
pœnam suscipere. In Prytaneo denique de ferro aliisque inanimis
judicium fit: cujus rei hoc initium fuisse arbitror. Erechtheo Athenis
regnante, primum bovem sacerdos is, qui Buphonus (bovis occisor)
est appellatus, ad Poliei Jovis aram occidit, statimque relicta bipenne
e finibus excessit: bipennis judicio absoluta est. Et eum quidem
ritum quotannis servant. (11) Dicuntur autem alia quoque inanima
sua sponte hominibus justam inflixisse ultionem: et Cambysis
acinaces pulcherrimum ac nobilissimum perpetravit facinus. In Piræei
maritima parte Phreattys est, ubi rei, si semel elapsi alio implicentur
crimine, e navi judicibus in littore consistentibus causam dicunt: ac
Teucrum aiunt primum omnium eo se modo Telamoni purgasse,
quum de Ajacis cæde culpa vacaret. Et hæc quidem de judiciis
commemoravimus eorum causa, quibus ut illa cognoscant curæ est.

CAPUT XXIX.

De nave ad Panathenæorum pompam ducendam constructa — Deliæ navis


magnitudine — templis et sepulcris extra urbem in pagis et viis — Academia
et Dianæ templo prope illam — sepulchris fortium et illustrium virorum in via
ad Academiam.
Non longe ab Areopago navis ostenditur ad Panathenæorum
pompam fabricata, qua fortasse major alia facile inveniatur: ea vero,
quæ Deli est, omnes, quas ego norim, magnitudine superat; e foris
enim ejus novenis eminent remigibus transtra.
2. Athenienses etiam extra urbem in demis sive pagis et in viis
passim deorum templa, heroumque et hominum habent sepulcra.
Proxime ad urbem Academia est, privati olim hominis ager, nunc
gymnasium: in illam descendentibus septum quoddam est Dianæ, et
simulacra Optimæ ac Pulcherrimæ: esse vero ea Dianæ cognomina,
et ipse conjicio, et Sapphus carmina testantur; sed traditur de iisdem
alia quoque fabula, quam sciens præteribo. Est etiam ædes non
magna, in quam Bacchi Eleutherensis simulacrum quotannis statis
diebus portant. Et tot quidem ipsis ea parte sunt ædes sacræ. (3)
Jam vero inter sepulcra primum obtinet locum Thrasybuli Lyci filii,
viri Atheniensium omnium, qui ante ipsum fuere quique post ejus
ætatem laudabiles, omni laudum genere præstantissimi: de quo,
quum nihil nunc necesse sit omnia commemorare, unum tamen, ex
quo sit ejus virtus testata, non prætermittam. Is triginta tyrannorum
dominatum initio cum sexaginta non amplius sociis, Thebis
profectus, evertit, et Atheniensibus diuturnis seditionibus pæne
afflictis, compositionis et concordiæ auctor fuit. Hujus primum
sepulcrum: alia deinceps sunt Periclis, Chabriæ, et Phormionis. (4)
Est etiam suum omnibus Atheniensibus, qui aut navalibus aut
terrestribus prœliis mortem oppetiere, monumentum, iis exceptis,
qui ad Marathonem ceciderunt. Illis enim eodem, quo occubuerunt,
loco sepulcra ad virtutis memoriam erecta. Ceteri in via sunt, quæ
ad Academiam ducit, sepulti ac pilæ tumulis impositæ cum elogiis
nomen cujusque et pagum testantibus. Primi eo loco sepulti sunt
quos, quum Thraciam jam omnem ad Drabescum usque
occupassent, Edoni de improviso adorti interemerunt: quos etiam
fulminibus ictos periisse dicunt. (5) Duces et alii fuerunt, et Leagrus,
cui copiæ omnes fuerant commissæ: et Decelensis Sophanes, qui
Eurybaten Argivum de quinque in Nemea certaminibus victorem
Æginetis opem ferentem occidit. Et hunc quidem extra Græciam
tertium exercitum Athenienses misisse constat. Nam Priamo et
Trojanis Græci omnes communi consensu bellum intulerunt:
Athenienses vero privatim cum Iolao in Sardiniam primum, deinde in
Ioniam quæ nunc dicitur, tertio in Thraciam arma promovere. (6) A
fronte monumenti columna est, in qua pugnantes equites duo
cernuntur, quorum uni Melanopo, alteri Macartato nomen: qui
adversus Lacedæmonios et Bœotios dimicantes, in ipsis Eleoniorum
et Tanagræorum finibus cecidere. Exstant et Thessalorum equitum
tumuli, qui pro vetere amicitia Atheniensibus auxilio venerunt, quum
in Atticam Peloponnesii, duce Archidamo, invasissent: ac secundum
eos Cretensium sagittariorum: Atheniensium rursus, Clisthenis
primum, qui eam tribuum rationem instituit, quæ etiamnum
observatur. Equitum deinde eorum, qui occubuerunt in eo prœlio, in
quo Thessali cum Atheniensibus periculum adiere. (7) Eodem etiam
in loco Cleonæi jacent, qui cum Argivis in Atticam venerant: qua
autem de causa venerint, tunc exponam, quum ad Argivorum res
descenderit historia. Sunt et eorum Atheniensium ibi tumuli, qui ante
Persicum bellum cum Æginetis pugnarunt. Æquitatis autem
plenissimum illud populi decretum fuit, quo Athenienses publicæ
sepulturæ honorem cum servis communicarunt: eorumque nomina
columnis incisa sunt, quo fideliter et strenue dominis eos in prœlio
operam suam navasse apparet. Sunt et aĺiorum virorum monumenta,
qui diversis in locis pugnantes ceciderunt: probatissimorum quidem
ex iis, qui ad Olynthum pugnarunt, et Melesandri, qui navibus
adverso Mæandro in superiorem Cariam contendit. (8) Ibidem
conditi sunt qui Cassandri bello occubuerunt, et qui ex Argivis tum
belli fuerunt socii. Hujus vero societatis cum Argivis hanc fuisse
causam tradunt. Sparta terræ motu concussa, Helotes in Ithomen
secesserunt. Fecit ea defectio, ut Lacedæmonii et ab aliis et ab
Atheniensibus auxilia poscerent. Missi sunt itaque lectissimi viri cum
Cimone Miltiadis filio: sed eos Lacedæmonii, quod suspectos
haberent, remiserunt. (9) Ubi igitur illi domum rediere, Athenienses
ea contumelia graviter commoti, cum Argivis, Lacedæmoniorum
hostibus perpetuis, fœdus fecerunt. Postea quum ad Tanagram cum
Bœotiis et Lacedæmoniis essent Athenienses prœlium commissuri,
auxilia illis quidem Argivi miserunt: neque multum abfuit quin ex acie
superiores discederent: verum nox, quo minus, utri vicissent, cerni
posset, obstitit. Postero deinde die Thessalorum proditione a
Lacedæmoniis Athenienses victi sunt. (10) Sed hi quoque mihi
recensendi sunt: Apollodorus mercenariorum dux, qui quum
Atheniensis esset, ab Arsita ejus Phrygiæ, quæ ad Hellespontum est,
satrapa missus, Perinthiorum civitatem, ejus fines Philippo cum
exercitu ingresso, servavit. Hic igitur illic sepultus est: item Eubulus
Spinthari filius: alii etiam viri, quorum virtuti fortuna fuit iniquior.
Eorum enim alii, quum in Lacharem tyrannum conjurassent, alii vero,
quum de ejiciendo ex Piræeo Macedonum præsidio consilia iniissent,
priusquam negotium conficerent, consciorum indicio oppressi sunt.
(11) Siti etiam ibi sunt qui ad Corinthum ceciderunt: ubi maxime
declaravit deus, quemadmodum in Leuctrica pugna iterum, eos, qui
a Græcis viri fortes appellantur, sine fortuna nihil esse: nam
Lacedæmonii, qui Corinthios ante, Athenienses, Argivos, et Bœotios
armis domuerant, ad Leuctra tam ingenti clade a solis Bœotiis afflicti
sunt. Post eorum tumulos, qui ad Corinthum periere, columnam
unam multis erectam esse, inscripti elegi testantur: hos enim in
Eubœa, et in Chio, illos in extremis continentis Asiæ finibus, alios in
Sicilia cecidisse indicant. (12) Duces etiam adscripti sunt præter
Niciam; et Platæenses milites una cum oppidanis. Niciam quidem
præteritum non aliam ob causam, quam quæ a Philisto proditur,
crediderim. Scribit enim ille, Demosthenem in deditione facienda se
unum excepisse; ac quum in hostium potestatem veniret, sibi ipsi
manus consciscere conatum: Niciam vero ultro deditionem fecisse;
eamque ob rem nomen ejus in columna inscriptum non est, quod, se
quum hostibus ultro dedisset, quod imperatore ac forti viro dignum
esset, non fecerat. (13) Sunt in alia columna inscripti qui in Thracia
et ad Megara pugnarunt; quique cum Alcibiade fuerunt, quum ejus
auctoritatem secuti Arcades, qui Mantineam tenent, et Elei a
Lacedæmoniis defecissent; et qui ante Demosthenis in Siciliam
adventum Syracusanos vicerunt. Sepulcra etiam eorum visuntur, qui
ad Hellespontum navali prœlio conflixerunt, et qui steterunt contra
Macedonas in Chæronea, quique sub Cleone ad Amphipolim
meruerunt. Ad hos, qui ad Delium in Tanagræorum finibus
ceciderunt, et quos in Thessaliam Leosthenes duxit, et qui cum
Cimone in Cyprum navigarunt: illi etiam, qui Olympiodorum secuti,
tredecim non amplius viri, præsidium ejecerunt. (14) Ferunt
Athenienses, Romanis aliquando se finitimum quoddam bellum
gerentibus auxilia non sane magna misisse: triremes etiam quinque
Atticas posterius navali prœlio contra Carthaginienses interfuisse.
Sua igitur iis etiam militibus sunt monumenta. Tolmidæ vero, et
militum ejus res gestas, quoque modo interierint, superius
exposuimus: eorum etiam, si quis forte id nosse aveat, in eadem via
sepulcra sunt. Siti præterea illic sunt, quorum magnum exstiti
Cimone duce facinus, eodem die hostes ad Eurymedontem terrestri
prœlio navalique superantium. (15) Conon exinde, et Timotheus
ibidem sepulti: qui post Miltiadem et Cimonem primi, pater et filius,
res magnas et præclaras gesserunt. Conditi ibi etiam sunt Zeno
Mnaseæ filius, Chrysippus Solensis, Nicias Nicomedis filius, in
pingendis animalibus ætatis suæ longe præstantissimus: Harmodius
et Aristogiton, qui Pisistrati filium Hipparchum occiderunt. Oratores
vero Ephialtes, qui Areopagi instituta, ut qui maxime, pervertit; et
Lycurgus Lycophronis filius, (16) qui in cogenda in publicum ærarium
pecunia Periclem Xanthippi filium superavit talentis sexies mille et
quingentis (?): idemque ad Minervæ pompas ornamenta multa, et
aureas Victorias comparavit, ac virginibus centum mundum, ad belli
autem usus scuta et jacula, et quadringentas ad navales pugnas
triremes. Inter opera vero, quæ exædificavit, theatrum est, quod
quum alii inchoatum reliquissent, ipse absolvit: ac dum reipublicæ
præesset, navale in Piræeo, et ad Lyceum quod dicitur gymnasium
erexit. Atque opera quidem ex auro et argento confecta Lachares
tyrannus sustulit: ædificia ad nostram ætatem permanent.

CAPUT XXX.

De dæmonis ᾿Aντέρως dicti ara in urbe — cursu cum facibus ad aram Promethei
— aliis aris in Academia — Platonis monumento — Cycno — turri Timonis —
aliis memorandis in hac urbis regione.
In primo Academiæ aditu Amoris est ara cum inscriptione: Charmum
Atheniensium primum Amori dedicasse. Eam vero aram, quæ intra
urbem est, quam appellant Anterotis, inquilinorum donum fuisse
dicunt, ac dedicationis hujusmodi causam exstitisse: Meles
Atheniensis amatorem suum Timagoram inquilinum hominem
fastidiens, ut de summo saxo se præcipitem abjiceret, jussit.
Timagoras, qui semper omnia, quæ puer imperaret, facienda
putasset, animam etiam ipsam facile profudit: unde enim jussus
erat, se præcipitem dedit. Meletem vero re cognita adeo pœnituit, ut
ex eodem se ipsum etiam de saxo dejiceret atque ita periret. Ex eo
ab inquilinis, ut Anteros genius, Timagoræ Amoris vindex, coleretur,
institutum. (2) In Academia Promethei ara est; a qua homines in
urbem accensas lampades præferentes currunt. In eo autem
certamen est, ut in cursu accensæ conserventur. Cujus enim fax
exstincta fuerit, is victoria successori cedit: eademque ratione ille
tertio. Quod si nulli ardentem perferre licitum fuerit, palma in medio
relinquitur. Est etiam Musarum ara, Mercurii alia; interius Minervæ;
etiam Herculis aram fecerunt. Olea inter hæc spectatur, quæ
secunda fertur prodiisse. (3) Non longe ab Academia Platonis est
monumentum, cui futuram in philosophiæ studio præstantiam
divinitus significatam tradunt, hoc modo: Socratem enim ea nocte,
quam dies ille est consecutus, quo se Plato in ejus disciplinam
tradidit, vidisse per quietem, cygnum sibi in sinum advolasse.
Cygnum autem canoram maxime avem esse, vulgo creditur. Cygnum
enim Ligurum, qui in Gallia Transpadana sunt, regem musicæ laude
clarum fuisse memorant, eumque, quum decessisset, ab Apolline in
sui nominis avem mutatum. Ego vero, apud Ligures regnasse in
musicis sollertem hominem, ut credam, facile adduci possum: sed
hominem in avem mutatum, minime fide dignum videri potest. (4) In
hac agri parte Timonis eminet turris, illius nempe, qui solus dixit,
felicitatis compotem esse non posse qui hominum aliorum
consuetudinem non defugiat. Ostenditur etiam locus, quem Colonum
Equestrem appellant: in quam Atticæ partem Œdipum primum
venisse ferunt, qui de eo diversa ab Homeri carminibus memoriæ
prodiderunt: sed produnt ita. Ibi et Equestris Neptuni et Equestris
Minervæ aras, ac Pirithoi, Thesei Œdipi, Adrasti, videas sacella.
Lucum autem Neptuni ac templum Antigonus, quum incursionem
faceret, incendit, alias quoque Atticam exercitu depopulatus.

CAPUT XXXI.

De memorandis in parvis Atticæ pagis — Hyperboreorum primitiis — Diana, unde


Colænis et Amarysia dicta.
Parvi Atticæ demi sive pagi, uti fors tulit, incolis frequentati, singuli,
hæc nobis, quæ literis mandemus, præbent. Apud Alimusios Cereris
Legiferæ et Proserpinæ fanum est. In Zostere prope mare Minervæ,
Apollinis, Dianæ et Latonæ templa sunt: ac Latonam quidem hic
peperisse negant: sed quum non longe pariundi tempus abesset,
zonam ibi solvisse dicunt: inde loco nomen inditum. Prospaltii et ipsi
Cereris et Proserpinæ ædem habent: Anagyrasii Matris Deûm
delubrum. Apud Cephalenses Castores præcipua quadam coluntur
religione: magni enim dii ab iis appellantur. (2) In Prasiensibus
Apollinis est templum, quo Hyperboreorum primitias mitti tradunt.
Eas enim Hyperborei Arimaspis committere feruntur, Arimaspi
Issedonibus: ab iis acceptas Scythæ Sinopen, inde ad Prasienses
Græci deportare: eas denique Delon Athenienses mittere.
Absconditæ illæ quidem in triticea stipula esse dicuntur, neque a
quoquam cognosci. Apud eosdem Prasienses Erysichthonis
monumentum est, qui quum e Delo, quo cum sacris iverat, domum
reveheretur, in ipso navigationis cursu e vita decessit. (3) Cranaum
vero Atheniensium regem ab Amphictyone genero regno pulsum,
ante diximus. Confugientem illum quidem cum suis partibus ad
Lamptrenses diem suum obiisse, et eodem in loco sepultum tradunt.
Cranai certe monumentum in Lamptrensibus etiamnum exstat. Ionis
quoque Xuthi filii (in Attica enim is habitavit, et in bello adversus
Eleusinios Atheniensium dux fuit) in eo Atticæ pago cui Potami
nomen, tumulus est. Et hæc quidem vulgata. (4) Phlyenses vero
Apollinis Dionysodoti et Dianæ Selasphori (Luciferæ) aras ostendunt,
Bacchi Anthii (Floridi), Ismenidum Nympharum, et Telluris, quam
magnam deam appellant. In altero vero templo, Cereris Anesidoræ
(dona summittentis), Jovis Ctesii (Penatis), Minervæ Tithrones, et
Proserpinæ Primigeniæ, et dearum quas nuncupant Semnas
(Severas, Eumenidum). Myrrhinunte Colænidis est signum antiquum.
Athmonenses Amarysiam Dianam colunt: (5) de qua percunctatus,
neminem ex interpretibus monumentorum nancisci potui, qui
liquidam ejus nominis causam explicaret. Quantum vero ipse
conjectura assequor, Amarynthus EubϾ oppidum est; ibi Amarysia
Diana colitur: et ipsi etiam Athenienses Amarysiæ Dianæ festum
diem agitant nihilo quam Eubœenses minore celebritate. Inde igitur
ad Athmonenses nomen manasse crediderim. Colænidem vero, quæ
Myrrhinunte est, a Colæno dictam existimo. Diximus autem et alibi,
in Atticæ pagis multos esse, qui Athenis ante Cecropem regnatum
affirment. Colænus itaque, ut Myrrhinusii dicunt, nomen est viri qui
ante Cecropem in Attica rex fuit. (6) Est et Acharnæ Atticæ pagus.
Hi Agyieum (Viarium) Apollinem, et Herculem venerantur, et iidem
Minervæ Hygieæ (Sospitæ) aram habent. Equestrem quoque
Minervam, et Melpomenum (Canentem) cognomine Bacchum vocant,
eundemque deum Cissum (Cissea? Hedereum) eo enim primum in
loco hederæ plantam visam tradunt.
CAPUT XXXII.

De montibus Atticæ ac signis arisque deorum in iis — Marathone pago et


memorandis in eo — fonte ibi Macaria.
Montes in Attica sunt, Pentelicus, ubi lapicidinæ: Parnes, qui
aprorum et ursorum venatoribus copiam præbet: Hymettus
pastiones habet apibus omnium aptissimas, quæque solis cedunt
Alazonum pascuis. Apud Alazones certe adeo mansuetæ sunt apes,
ut cum aliis una pabulatum exeant, ac libere vagentur, quippe quæ
alvearibus nullis contineantur: passim vero opus faciunt, illudque ita
concretum, ut mel a cera nequeas sejungere. Hæc quidem ita se
habent. (2) Deorum quoque signa in Atticæ montibus sunt. In
Pentelico Minervæ: in Hymetto Hymetti Jovis statua est, Ombrii
(Pluvii) etiam Jovis, et Apollinis Proopsii (Præsagi) aræ: in Parnethe
Parnethius Juppiter ex ære, et Semalei Jovis ara. Est item ara ibidem
alia, ad quam Jovi, quem modo Pluvium modo Apemium (Innoxium)
appellant, rem divinam faciunt. Anchesmus etiam mons est non sane
magnus, et Jovis Anchesmii signum.
3. Sed antequam ad insulas stilum convertam, quæ ad Atticæ pagos
pertinent, rursus persequar. Marathon pagus pari spatio ab Athenis
abest et Carysto Eubœæ oppido. Ad hanc Atticæ partem Persæ
primum appulerunt: ac prœlio fusi, non paucas in ipsa fuga naves
amiserunt. In prato tumulus est Atheniensium, qui in pugna
ceciderunt: et ex eo pilæ eminent, in quibus cæsorum nomina et
tribus inscriptæ sunt. Alter erectus est Platæensibus Bœotis et
servis: tunc enim primum servi stipendia fecerunt. (4) Seorsum vero
monumentum est Miltiadis Cimonis filii: cujus virtuti quum non satis
secunda fortuna, dum Paron obsideret, respondisset, non ita multo
post, quam ab Atheniensibus damnatus est, e vita decessit. In his
campis audiuntur singulis noctibus equorum hinnitus, et pugnantium
etiam virorum species cernuntur. Atque hæc quidem qui de industria
distincte auditum spectatumve venerunt, male multati omnes
abierunt; is vero, qui fortuito id animadverterint, ex ira numinum
nihil omnino triste accidit. Honorem Marathonii et illis habent, qui in
pugna occubuerunt, heroasque eos appellant, et Marathoni, a quo
est pago nomen, et Herculi, cujus sacra se primos Græcorum
instituisse dictitant. (5) Accidit autem ut in ea pugna (ut illi
memorant) vir quidam specie atque habitu agresti opem tulerit: qui
quum ex barbaris quamplurimos aratro interemisset, repente
evanuit: neque vero quærentibus, quisnam ille fuisset, Atheniensibus
aliud respondit oraculum, quam ut Echetlæum (Stivarium) heroem
colerent. E candido vero lapide eo in loco tropæum erexerunt. Ac
Persæ quidem ut humarentur, se curasse dicunt Athenienses: quod
semper pium esse existimarint mortuos terræ mandare. Verum ego
neque aggerem ullum, nec aliud sepulturæ vestigium offendi. Eos
itaque suspicari possum in foveam quampiam, ut fors tulit, abjectos.
(6) In Marathone Macaria fons est, de quo hæc memoriæ prodita
sunt: Herculem, quum e Tirynthe Eurystheum fugeret, ad Ceycem
Trachiniorum regem, amicum sibi hominem, venisse: quumque ex
hominum consortio excessisset Hercules, Eurystheum ejus sibi
liberos tradi postulasse: Trachinium vero Athenas eos misisse,
memorantem et suam imbecillitatem, et quod Theseus non impar
esset ulciscendis. Quum igitur liberi illi supplicum habitu venissent,
Peloponnesiis in causa erant ut Atheniensibus tunc primum bellum
inferrent, quod Theseus petenti Eurystheo pueros dedere recusasset.
Dicunt autem Athenienses oraculum monuisse, victoriam in spe fore,
si se unus ex Herculis liberis ultro devovisset. Ibi Macariam, Herculis
ex Deianira filiam, quum sibi mortem conscivisset, et victoriæ
compotes Athenienses fecisse, et fonti nomen dedisse. (7) Est etiam
in Marathone lacus, magna ex parte cœnosus: in quem per viarum
errorem fugientes Persas irruisse, et quamplurimos in ipsa fugæ
trepidatione cæsos dicunt. Supra eum lacum lapidea præsepia
Artaphernis equorum sunt, et in saxo tabernaculi vestigia. E lacu
amnis effluit: ad cujus caput aquæ pecori aptissimæ sunt; non longe
vero a mari salsæ et marinis piscibus refertissimæ. Modico a campis
intervallo mons est Panis: in quo hæc sunt, quæ spectentur,
dignissima: specus, cujus est ingressus perangustus: ubi vero
penetraris, et cellas videas et lavacra, caprarum etiam stabulum,
quod Panos appellant: sunt saxa, caprarum propemodum forma.
CAPUT XXXIII.

De pago Braurone et Dianæ Tauricæ signo — pago Rhamnunte et Nemesi


Rhamnusia — Æthiopum variis gentibus et Atlante monte — Nemesis signo
non alato et reliquis in ejus basi signis.
A Marathone non multum abest Brauron: quo Iphigeniam
Agamemnonis filiam cum Taurica Diana primum appulisse, eaque ibi
relicta, Athenas, et deinde Argos venisse perhibent. Eo quidem in
loco vetus est Dianæ signum. Qui vero e barbaris populis Tauricæ
Dianæ signum habeant, sententiam ea de re meam in alia historiæ
parte exponam. (2) A Marathone stadia ferme sexaginta Oropum
versus per litus progressis Rhamnus occurrit: hominibus ibi domicilia
sunt ad mare; paululum vero a mari adscendentibus occurrit fanum
Nemesis. Hæc se deorum una maxime insolentioribus hominibus
implacabilem præbet: et ejusdem iram etiam barbaros, qui ad
Marathonem escensionem fecerant, afflictos putant. Quum enim
Athenas facile se capturos opinarentur, Parium marmor, ac si hostem
jam vicissent, tropæi erigendi causa secum ferebant. (3) Ex eo
Phidias Nemesis signum fecit: in cujus capite corona cervos habet, et
Victoriæ sigilla: ipsa læva fraxini ramum, dextera phialam tenet. In
phiala Æthiopes cælati sunt: de quibus Æthiopibus neque, quid ipse
conjiciam, habeo, neque eorum tamen, qui se rem intelligere
profitentur, opinioni assentior: eos in phiala factos ad Oceanum
amnem significandum: ad ipsum enim Æthiopas accolere, et eundem
Nemesis patrem esse. (4) Nam ad Oceanum, non sane flumen, sed
extremum mare, quo navibus scilicet pervadi possit, accolunt Hispani
et Galli: et in eo Britannia insula est. At Æthiopum supra Syenen ad
mare Rubrum extremi habitant Ichthyophagi (populi piscibus
vescentes): a quibus sinus is, quem circumquaque tenent,
Ichthyophagus appellatur. Hominum vero justissimi Meroen et
campos, qui Æthiopici vocantur, incolunt. Mensam hi Solis ostentant:
sed neque mare, neque flumen omnino aliud quam Nilum habent.
(5) Sunt et alii Mauris finitimi Æthiopes, ad Nasamonas usque
pertinentes. Nasamones enim, quos Atlantas Herodotus nominat, illi
autem, qui orbis terræ spatia nosse profitentur, Lixitas appellant,
Libyum extremi Atlantem accolunt: serunt autem omnino nihil, sed
agrestium tantum vitium fructu aluntur. Verum neque hi Æthiopes,
neque Nasamones, ullos habent amnes: quæ enim Atlanti vicina est
aqua, etsi in alveos tres discedit, nullus tamen ex hisce in modum
justi fluminis crescit, sed quicquid aquæ exstitit, statim arena
absorbet. Ita Æthiopes fluvii nullius aut Oceani accolæ sunt. (6) Et
aqua quidem, quæ ex Atlante descendit, turbulenta est, circaque
ejus fontes crocodili gignuntur nihilo bicubitalibus minores: qui ubi
propius homines accedere senserint, in fontem se demergunt. Quæ
res effecit ut non pauci suspicarentur, ab hac ipsa aqua e mediis
arenis emergente Nilum Ægyptiis oriri. Atlas autem mons adeo
celsus est, ut vertice cœlum tangere dicatur: inaccessus ille quidem,
viam undique aquis et arborum crebritate intercludente. Ab eo
itaque duntaxat parte, quæ Nasamonas spectat, cognoscitur: ad
martimam enim ejus oram neminem adhuc navibus accessisse
comperimus. (7) Sed ut, unde digressa est, redeat oratio, Nemesis
neque hoc, neque aliud vetus signum alas habet. Apud Smyrnæos
vero, quæ maxima cum religione coluntur signa, alas habere postea
animadverti. Cujus rei eam esse causam suspicor, quod ejus numen
ad amatores maxime pertineat: idcirco ei, ut Cupidini, alas addunt.
Nunc jam, ea quæ in signi basi sunt, exponam, si unum prius, quo
res tota clarior fiat, explicavero. Helenæ matrem fuisse Nemesin,
Græci dicunt, Ledam vero nutricem; patrem autem Helenæ similiter
omnes Jovem, non Tyndarum perhibent. (8) Quæ quum Phidias
nosset, Ledam ea specie fecit, ut Helenam ad Nemesin adducere
videatur. Addidit Tyndarum et filios, hominem præterea cum equo
assistentem, quem Equitem appellant. Adsunt Agamemnon,
Menelaus et Pyrrhus Achillis filius, qui primus Hermionen Helenæ
filiam in matrimonium duxit. Orestes vero ob impium in matrem
facinus præteritus est: quem tamen Hermione nunquam deseruit,
quum filium etiam ei peperisset. In basi deinceps est, quem
Epochum dicunt, et alter item adolescens: de quibus aliud accepi
nihil, nisi eos Œnoes fratres fuisse, a qua est pago illi nomen.
CAPUT XXXIV.

De Oropo urbe — Amphiarai templo, cultu et aliis ad eum pertinentibus.


Oropium autem agrum, qui medius est inter Atticam et Tanagræos,
olim tenebant Bœoti: ætate nostra in Atheniensium potestate est.
Nam quum omni tempore Athenienses de eo dimicassent, non ante
potiti sunt, quam eum a Philippo, quum Thebas ille expugnasset,
acceperunt. Urbs quidem ipsa, cui Oropus nomen, ad mare sita est,
nihil vero historia dignum præ se fert. Ab ea circiter duodecim stadia
Amphiarai templum abest. (2) Amphiaraum Thebis fugientem cum
curru absorptum terræ hiatu ferunt. Sunt tamen qui id accidisse
dicant in via, qua Thebis Chalcidem iter est, qui locus Harma
(currus) dicitur. In deorum vero numerum Amphiaraum primi
omnium Oropii retulerunt, quos deinde reliqui Græci secuti sunt.
Possum etiam alios recensere, quibus, quum homines ante fuissent,
Græci divinos honores habuerunt, aliis etiam urbes dedicatæ sunt, ut
Elæûs in Chersoneso Protesilao, in Bœotia Lebadea Trophonio: apud
Oropios templum Amphiarao et eidem e candido lapide signum est.
(3) Ara quidem ejus in partes distributa est: quarum una Herculi,
Jovi et Apollini Pæoni: altera heroibus, eorumque uxoribus: sacrata
tertia Vestæ, Mercurio, Amphiarao et Amphilochi filiis (nam Alcmæon
propter Eriphyles cædem in nullam aut Amphiarai aut Amphilochi
honorum partem receptus est): at quarta aræ pars Veneri, Panaceæ,
Iasoi, Hygieæ, Minervæ Pæoniæ: quinta Nymphis, Pani, Acheloo et
Cephiso amnibus sacra est. Amphilocho in ipsa urbe apud
Athenienses ara sua est; in Ciliciæ vero urbe Mallo ejusdem
oraculum, quod omnium est, quæ ætate mea exstant, minime fallax.
(4) Est etiam apud Oropios fons templo propinquus, quem Amphiarai
nuncupant, in quem neque divinam rem faciunt, neque aut ad
lustrandum, aut ad manus lavandas, aqua ea uti fas putant: sed qui
morbo oraculi monitu levati fuerint, signatum aurum argentumve
more majorum in fontem abjiciunt. Hinc enim jam deum
Amphiaraum ascendisse tradunt. Iophon autem Gnosius, vatum
oracula heroicis versibus exposuit dixitque Amphiaraum
consulentibus Argivis, quum Thebas profecturi essent, responsum
dedisse. Isti versus habebant quod multitudinem mirifice alliceret.
Præter eos vero, quos Apollinis afflatu futura prædixisse antiquitas
testata est, nemo omnino fatidicus fuit: nam reliqui aut somniorum
interpretes fuere, aut avium volatus et exta inspiciendi peritiam
profitebantur. (5) Amphiaraum igitur conjectandis somniis in primis
sollertem fuisse suspicor. Constat enim, illum, somniorum divinatione
tradita, tum demum in deorum numerum relatum. Consulendi
quidem causa qui accedunt, lustrantur omnes. Pro piaculo res divina
est: quam quum Amphiarao ipsi faciunt, tum ceteris, quibus *
nomina. His ante peractis arietem immolant; cujus substrata pelle,
dormientes nocturna visa exspectant.

CAPUT XXXV.

De insulis Atticæ, Patrocli, Helena, Salamine — memorandis in Salamine — Ajace


ejusque corporis magnitudine — aliis grandium corporum ossibus — Geryone
et Hyllo.
Insulæ terræ Atticæ non longe ab ipso litore distant. Earum una
Patrocli dicitur: de qua jam exposui. Altera supra Sunium est, ad
lævam in Atticam navigantibus: ad quam post Ilii eversionem
Helenam appulisse ferunt, et idcirco Helenen appellatam. (2) Salamis
e regione Eleusinis sita, ad Megarici etiam agri fines pertinet.
Primum autem * nomen insulæ imposuisse hunc (Cychreum) a
matre Salamine Asopi filia: Æginetas postea in eam a Telamone
deductos: traditam postea Atheniensibus a Philæo, Eurysacis filio,
Ajacis nepote, quum ab ipsis fuisset civitate donatus. Salaminios
vero multis post annis Athenienses eo nomine damnatos, quod
dissimulanter male rem geri concupissent, dum bellum cum
Cassandro gereretur, et in Macedonas propenso animo fuissent, urbe
deleta, e suis sedibus ejecerunt. Ascetaden etiam, qui prætor
insulam obtinuerat, capitis damnarunt, ac jurejurando ejus
proditionis memoriam Salaminiis apud se fore sempiternam
sanxerunt. (3) Spectantur hac etiamnum ætate fori ruinæ, et Ajacis
templum cum statua ex ebeno. Decreti quidem Ajaci et Eurysaci ejus
filio ab Atheniensibus honores adhuc manent: et Eurysacis etiam
Athenis ara est. Ostenditur Salamine non longe a portu saxum, super
quo Telamonem consedisse aiunt, quum navem, qua Aulidem filii ad
Græcorum classem vecti sunt, oculis prosequeretur. (4) Tradunt
incolæ, post Ajacis interitum apud se primum florem enatum,
candidum, rubentem modice, lilio quum ceteris partibus tum foliis
minorem, inscriptum vero iisdem, quibus hyacinthum, literis. Audivi
quidem, quæ Æoles, qui Ilium post tenuerunt, de armorum judicio
produnt, post Ulyssis naufragium arma ad Ajacis sepulcrum delata.
(5) De Ajacis vero magnitudine narravit mihi Mysus quidam,
sepulcrum ejus, qua parte ad litus conversum est, maris alluvione
multo aditu facilius effectum. Inde vero, aiebat, de Ajacis
magnitudine me conjecturam capere posse, quod genuum vertebræ,
quas molas medici appellant, disci instar essent ejus, quo athletæ ii,
qui sunt quinquertiones appellati, utuntur. Equidem Gallorum, qui in
extremis partibus habitant, finitimi desertis præ nimio frigore
regionibus, quos Cabares nominant, nihil sum magnitudinem
admiratus: neque enim apud eos cadavera videas major iis, quæ
ostendunt Ægyptii. Quæ vero admiratione digna mihi visa sunt, ea
commemorare non gravabor. (6) Apud Magnesios, qui ad Lethæum
sunt, quidam fuit Protophanes, qui de pancratio et lucta eadem die
in Olympia victor est renunciatus. In hujus sepulcrum aliquando
latrones prædæ spe ducti penetrarunt: post illos alii, ut cadaver
duntaxat spectarent. Ejus costæ non discretæ fuerunt: sed pro illis
continens os habuit ab humeris ad eas costas, quas medici nothas
nuncupant. Apud Milesios vero ante ipsam urbem est Lade insula. Ea
rursus in parvas scinditur insulas, quarum alteram Asterii dicunt,
quod fuerit in ea sepultus Asterius Anactis filius: Anactem autem
Terræ filium fuisse tradunt: cadaver ejus nihilo est decem cubitis
brevius. (7) Quod vero mihi magnæ fuit admirationi, in superiori
Lydia non magna urbs est Temeni porta. Ibi, ambeso tempestatibus
sepulcro, ossa detecta sunt, quæ nisi humanorum ossium figuram
retinuissent, propter magnitudinem nemo ea hominis fuisse, ut
crederet, adduci facile potuisset. In vulgus repente sermo manavit,
Geryonæ illud cadaver esse Chrysaoris filii: soliumque ejus fuisse,
quod in montis fragmento excisum cernebatur, torrentemque
Oceanum appellari aiebant: addebant etiam, agricolas boum cornua
sæpe inter arandum eruisse, quod scilicet Geryonem eximia specie
boves aluisse fama vulgasset. (8) Quorum opinioni quum ego
neutiquam assentirer, Gadibus habitasse Geryonem demonstrabam,
neque ullum ejus monumentum exstare, arborem tantum ostendi,
cujus admodum esset varia species. Ibi e Lydis antiquitatis periti
homines, quæ vere narrentur, disseruerunt: Hylli cadaver illud esse:
fuisse vero Hyllum Terræ filium, a quo regionis fluvius nomen
acceperit: et Herculem propter Omphales olim consuetudinem filium
de fluminis nomine appellasse.

CAPUT XXXVI.

De aliis in Salamine memorandis — insula Psyttalia — monumentis in via sacra


versus Eleusinem — Anthemocrito — Sciro vate — Cephisodoro — bello
Atheniensium contra Philippum Demetrii filium.
Salamine (ut, unde fueram digressus, redeam) Dianæ templum est,
et tropæum in memoriam ejus victoriæ, cujus Themistocles Neoclis
filius Græcis omnibus auctor fuit. Erectum Cychreo etiam templum.
Commisso enim cum Persis prœlio, draconem inter naves
conspectum memorant: de quo Atheniensibus Cychreum fuisse
heroem Apollo respondit. (2) Ante Salaminem insula est, cui Psyttalia
nomen: in eam ex Persarum exercitu quadringentos descendisse
proditum est; deleta vero Xerxis classe, quum eodem Græci
transmisissent, etiam hos ad internecionem cæsos. Signum in insula
nullum quidem exstat arte expolitum: Panos tantum quædam statuæ
sunt ut fors ferebat confectæ.
3. Qua Eleusinem Athenis iter est, per eam viam, quam sacram
appellant, Anthemocriti monumentum conspicitur: quem per
summum nefas Megarenses occidere, quum caduceator edictum
missus fuisset, ne porro terram colerent. Sed in hunc usque diem
læsi numinis pœnas dederunt. Solos enim ex omnibus Græcis ne
Adrianus quidem Imperator sublevavit. (4) Post Anthemocriti cippum
Molossi tumulus est: cui imperium Athenienses decrevere, quum in
Eubœam Plutarcho auxilia mittenda censuerunt. Vicus prope est, cui
Scirum nomen. Appellationis hujusmodi causa prodita est. Dum
Eleusinii bellum cum Erechtheo gererent, vate usi sunt Dodonæo, cui
Sciro nomen. Is Sciradis Minervæ vetustum templum in Phalero
dedicavit, quumque in pugna cecidisset, sepultus est non longe a
torrenti amne. Locus itaque et amnis ab heroe nomen habent. (5)
Prope Cephisodori monumentum structum est: qui quum populo
præesset, Philippo Demetrii filio Macedonum regi vehementer
restitit: et cum Atheniensibus Mysorum regem Attalum, et
Ægyptiorum Ptolemæum, ex liberis vero gentibus Ætolos ac
insularum incolas Rhodios et Cretenses amicitia et societate
conjunxit. (6) Verum quum e Mysia, Ægypto et Creta plerumque
serius auxilia mitterentur, ac Rhodii, qui alias quam navales copias
non haberent, contra gravem Macedonum armaturam parvo omnino
essent præsidio futuri, tunc Cephisodorus cum aliis Atheniensium in
Italiam nave vectus, a Romanis auxilia impetravit. Ii vero exercitu et
imperatore misso Philippi et Macedonum vires adeo fregerunt, ut
non multo post Perseum Philippi filium non regno tantum ejecerint,
sed captivum etiam Romam pertraxerint. Fuit Philippus Demetrii
filius: qui Demetrius primus ex hac familia, quemadmodum ante
exposui, Alexandro Cassandri filio interfecto, Macedoniæ regnum
obtinuit.

CAPUT XXXVII.

De aliis monumentis clarorum virorum ad Viam sacram — Acestio — Phytalo — de


memorandis trans Cephisum — templo Cyamitæ — Harpalo — Apollinis
templo — Cephalo ejusque posteris.
Secundum Cephisodori Heliodori Haliensis (?) sepulcrum est: cujus
pictam imaginem et in magno Minervæ templo videas. Sepultus
ibidem est Themistocles Poliarchi filius, Themistoclis ejus pronepos,
qui navale prœlium cum Xerxe commisit. Hujus quidem posteros,
præter Acestium, reliquos commemorare omittam. Hæc Acestium
Xenoclis, Sophoclis filii, Leontis nepotis, filia fuit, ac vivens suos
omnes a Leonte proavo daduchos vidit: etiam eodem sacerdotio
honestatos, Sophoclem fratrem, Themistoclem deinde maritum, et
eo mortuo Theophrastum filium. Atque illa quidem ejusmodi fortuna
usa est. (2) Longius progressis Lacii herois lucus in conspectu est, et
Laciadarum ab eo nominatus pagus. Nicoclis etiam Tarentini
monumentum est, cujus supra omnes citharœdos celebre nomen
fuit. Est eodem in loco ara Zephyro erecta, Cereri et Proserpinæ
templa: quibus cum Minerva et Neptuno communes honores
habentur. In hac ipsa regione a Phytalo aiunt Cererem hospitio
acceptam, eique fici stirpe donata gratiam relatam. Id versus
testantur in Phytali sepulcro incisi:
Hic Cererem tectis Phytalus susceperat heros,
cui primum sacri largita est semina pomi,
quam mortale genus ficum vocat. Illius ergo
muneris æterno hic Phytali gens floret honore.

(3) Priusquam Cephisum amnem transeas, Theodori monumentum


est, cui in tragœdia agenda primas ætas sua detulit. Juxta fluvium
simulacra sunt alterum Mnesimaches, alterum filii, Cephiso crinem
suum detondentis. Fuisse vero patrium Græcis omnibus, crinem
fluminibus tondere, ex iis Homeri versibus conjicias, in quibus est,
Peleum Sperchio pro felici Achillis a Troja reditu crinem suum
vovisse.
4. Trans Cephisum Milichii Jovis vetus ara est: ad quam Theseus a
Phytali posteris de cæde purgatus dicitur, quum et alios latrones, et
Sinin a Pittheo sibi propinquum occidisset. Sepulcra ibidem sunt:
Theodectis Phaselitæ, et Mnesithei, quem medendi arte claruisse
accepimus, ac signa multa dedicasse, atque ex iis Iaccho unum. In
ipsa via ædes non magna visitur: Cyamitæ (Fabarii) templum
appellant. Compertum autem non habeo, fabarumne hic sationem
primus docuerit, an vero heroum alicui sit id nominis tributum neque
enim fabarum inventum Cereri adscribere possunt. Qui vel initiis illis,
quæ Eleusine fiunt, interfuerint, vel ea, quæ Orphica appellantur,
legerint, facile id, quod dico, intelligent. (5) Monumenta et
magnitudine et operis magnificentia præstantia sunt, alterum Rhodii
cujusdam viri qui se Athenas contulit: alterum Harpalus Macedo
excitavit, is qui Alexandrum fugiens ex Asia in Europam classe
trajecit; quumque Athenas venisset, ab Atheniensibus captus,
corruptis quum aliis, tum ipsius Alexandri amicis, periculum effugit.
Sed is ante Pythonicen uxorem duxerat, cujus neque genus neque
patriam novi: tantum scio, Athenis eam et Corinthi corpus vulgasse.
Eam vero tam perdite amavit Harpalus, ut mortuæ monumentum
posuerit, omnium, quæ in Græcia sunt, veterum operum, quod
spectetur, dignissimum. (6) Templum etiam ibi spectes, in quo
Cereris, Proserpinæ, Minervæ et Apollinis signa sunt. Ab initio fuit
ædes uni Apollini dicata. Cephalum enim aiunt Deionis filium cum
Amphitryone primum ad Teleboas, in eam insulam, quæ nunc de
ipsius nomine Cephallenia dicitur, profectum: nam Thebas ante,
Athenis ob Procridis uxoris cædem exul, migrarat. Ejus Cephali
posteros, decem jam exactis ætatibus, Chalcinum et Dætum, quum
Delphos navigassent, ac deum de reditu in antiquam patriam
consuluissent, (7) responsum accepisse, ut in Atticam reversi, quo in
loco humi currentem triremem vidissent, ibi Apollini rem divinam
facerent. Quum itaque ad montem, quem Pœcilum appellant,
appropinquassent, draconem offendisse celeri se lapsu in latebras
demittentem: ibi eos rem divinam Apollini fecisse, ac mox ab
Atheniensibus in civitatem receptos. Post hoc templum Veneris ædes
est: cujus in fronte paries exstructus est e rudi lapide, opere tamen
insigni.

CAPUT XXXVIII.

De Rhitis alveis — Crocone — Eumolpo — Celeo ejusque filiabus — Ceryce —


Zarece — memorandis apud Eleusinios — Rario campo — Eleusine heroe —
Platæensi agro et Eleutherensibus — Antiope ejusque liberis.
Jam alvei, qui Rhiti appellantur, solo cursu fluminibus similes sunt:
nam eorum aqua maris saporem refert. Quæ res alicui fortasse
persuaserit, e Chalcidico eos Euripo manantes e terra in depressius
mare delabi. Rhetos quidem Cereri ac Prosperinæ sacros esse
tradunt: neque eos, qui in illis nascuntur, pisces cuiquam licet
præterquam sacerdotibus capere. Atque hi quidem veteres Eleusinii
sunt et Attici agri fines, uti accepi. (2) Agrum vero, qui trans Rhetos
est, primus tenuisse dicitur Crocon; et locus ille Croconis nunc etiam
Regia appellatur. Cum hoc Crocone Celei filiam Sæsaram nuptam
fuisse, Athenienses memorant, neque tamen hæc omnes, sed ii
tantummodo, qui e Scambonidarum sunt pago. Croconis tamen
sepulcrum invenire nunquam potui. Eumolpi vero tumulum et
Eleusinii et Athenienses agnoscunt. Venisse Eumolpum istum e
Thracia, filiumque Neptuni et Chiones fuisse, traditum est: Chionem
vero Boreæ vento ex Orithyia genitam. De illius quidem parentibus
nihil omnino Homerus prodidit: in quadam tantum carminum suorum
parte animi præstantem appellat Eumolpum. (3) Enimvero commissa
inter Eleusinios et Athenienses pugna, hinc Erechtheus rex
Atheniensium, illinc Eumolpi filius Immaradus ceciderunt. Arma inde
his conditionibus posita ut Eleusinii se suaque cetera omnia in
Atheniensium potestatem traderent, initia tamen ipsi tanquam
propria retinerent. Sic Cereri et Proserpinæ Eumolpus et Celei filiæ
sacra faciunt. Eas iisdem nominibus Pamphos et Homerus appellant,
Diogeneam, Pammeropen, tertiam Sæsaram. Ex Eumolpi vero filiis
natu minimus Ceryx patri superstes fuit: quem tamen Ceryces ipsi ex
Aglauro Cecropis filia et Mercurio, non Eumolpo, procreatum dicunt.
(4) Est sacellum Hippothoontis, a quo tribus nomen habet: atque illi
proximum Zarecis, quem tradunt musicam apud Apollinem didicisse:
ego vero Atticæ inquilinum fuisse, patria Lacedæmonium, et ab eo
maritimam Laconiæ urbem Zaraca appellatam existimo. Quod si quis
fuit Atticæ indigens heros Zarex, de eo quod dicam, plane nihil
habeo. (5) Cephisus vero amnis ad Eleusinem cursu multo, quam
quovis alio in loco, concitatiore defertur. Prope locus est, cui Erineo
(caprifico) nomen: unde Plutonem rapta Proserpina descendisse,
fama vulgavit. Ad hunc Cephissi alveum Theseus latronem
Polypemonem, Procrusten cognomine, occidit. (6) Apud Eleusinios
Triptolemi ædes est, Propylææ Dianæ, et Neptuni Patris: puteus,
quem Callichorum appellant, ubi primum chorum Eleusiniorum
feminæ instituerunt et deam cantu veneratæ sunt. In campo vero,
quem Rarium vocant, frugum primum jacta semina adolevisse
ferunt: in cujus rei memoriam hordeum ex eo ipso solo demessum in
sacris ad molas et liba adhibent. Ostenditur ibidem area, quæ
Triptolemi dicitur, et ei dedicata ara. (7) At quæ intra sacrum
parietem servantur, scribere somnio prohibemur. Iis enim, qui initiati
non fuerint, non tantum eorum adspectu interdictum est, verum
etiam ne percontari quidem aut audire fas quicquam est. Eleusinem
vero heroem, unde oppidum nomen habet, nonnulli Mercurio et
Daira Oceani filia genitum putant; alii Ogygum Eleusinis patrem
fuisse fabulati sunt. Nam priscæ traditiones, quum genealogiis
carerent, et alia fingendi locum dederunt et maxime circa heroum
genera.
8. Qua ab Eleusine in Bœotiam iter est, Atheniensibus Platæensis
ager finitimus est. Nam Atticam olim et Bœotiam Eleutherenses
dirimebant: sed posteaquam Eleutherenses in Atheniensium
potestatem venerunt, Cithæron mons finis utriusque regionis haberi
cœptus est. Attico vero nomini non illi quidem bello subacti se
adjunxerunt, sed quod eam in primis reipublicæ formam, qua
Athenienses utebantur, expetiverunt, quodque capitali in Thebanos
odio semper laborarunt. In iisdem campis Bacchi templum est: atque
inde est Athenas olim signum ejus deportatum. Nam quod Eleutheris
hac etiam ætate exstat, ad illius est similitudinem factum. (9) Non
procul specus abest, modica quidem magnitudine: fons proximus
frigidæ aquæ. In eo specu Antiopen narrant, quos pepererat
geminos, exposuisse, pastoremque sublatos pueros fasciis exemtos
illis aquis primum lavisse. Eleutherarum quum muri, tum ædium
etiam vestigia remanent. Ea res planum facit, oppidum ipsum non
multum supra campos Cithæronem versus fuisse.

CAPUT XXXIX.

De memorandis in via ex urbe Eleusine Megara versus — puteo Anthino —


Metaniræ templo — sepulcris ad Thebas occisorum — Alope et Cercyone —
Theseo luctandi artis inventore — de Megarici agri et urbis originibus ac fatis
narratio.
Altera ab Eleusine via Megara ducit: per eam qui ingrediuntur,
puteum offendunt, cui nomen Anthio. Super eo Pamphos versibus
mandavit Cererem post raptum Proserpinæ, anus facie sumta,
consedisse: atque inde illam Celei filias, quod nempe esse anum
putassent, ad matrem deduxisse: Metaniram vero ei filium
educandum tradidisse. (2) Non longe a puteo Metaniræ sacellum
est, et eorum, qui ad Thebas ceciderunt, tumuli. Quum enim Creon,
qui Laodamantis Eteoclis filii tutela suscepta Thebis imperabat, non
sineret cæsorum cadavera tolli a propinquis et humari, Thesei opem
Adrastus imploravit. Commissa itaque inter Athenienses et Thebanos
pugna, victor Theseus in Eleusinium agrum deportanda cadavera
atque ibi sepelienda curavit. Thebani tamen neque se, quin
humarentur, prohibuisse, neque ullum sibi cum Atheniensibus
certamen fuisse dicunt. (3) Post Argivorum sepulcra Alopes
monumentum est: quam, quum Neptuno Hippothoontem peperisset,
eo ipso in loco a Cercyone patre interfectam ferunt. Cercyonem
ipsum traditum est in omnes hospites immanem fuisse, præcipue
tamen in eos, qui in luctæ certamen descendere recusassent. Et
ætate quidem mea locus ille, qui ab Alopes tumulo non longe abest,
Cercyonis palæstra appellatur. Dicitur autem Cercyon omnes, qui
lucta secum certassent, occidisse, præter Theseum tamen, a quo
arte inprimis luctandi est superatus. Palæstricen enim Theseus
primus invenit: et ab eo profecta palæstritarum disciplina, posterius
magistris celebrari cœpta, quum ante sola corporis magnitudine et
robore in lucta certaretur. Hæc sunt quæ apud Athenienses, uti ego
sentio, aut prædicantur, aut cum admiratione spectantur, quum ea
ab initio missa fecerim, quæ leviora sunt quam ut ullam institutæ
historiæ possint dignitatem afferre.
4. Eleusini finitima est Megarica terra: cujus imperium Pylæ regi a
Pandione relictum Athenienses olim habebant. Ejus rei testimonia
mihi sunt, quod in ipsis Megarensium finibus exstat Pandionis
sepulcrum, quodque, quum Ægeo, qui in ea familia natu maximus
erat, Atheniensium regno Nisus concessisset, Niso Megara obtigerunt
et quicquid agri ad fines usque Corinthiorum pertinet: manet autem
apud Megarenses adhuc navale, quæ Nisæa ab ipso appellatur.
Regnante vero Codro, quum Peloponnesii bellum Atheniensibus
intulissent ac nihil omnino insigne ad gloriam in eo aliud gessissent,
dum se domum reciperent, Megara Atheniensibus ademerunt,
Corinthiosque ac ceteros auxiliarios, qui nomina dedissent, illic
habitare siverunt. (5) Quæ res effecit ut Megarenses, lingua cum
moribus mutata, Dores fierent. Urbem vero eo nomine appellatam
putant Care Phoronei filio regnante. Tunc enim primum Cereris
templa apud se erecta, eaque Megara appellata, Megarenses ipsi
commemorant in iis, quos de rebus suis habent, sermonibus. At
Bœotii Megareum dicunt Neptuni filium Onchesti sedem habentem
cum Bœotiorum manu Niso contra Minoem auxilio venisse: quumque
in prœlio cecidisset, eo ipso, in quo ceciderat, loco sepultum urbi,
quæ ante Nisa appellabatur, nomen dedisse. (6) Ad hæc addunt
Megarenses, Lelegem, duodecim post Carem Phoronei filium
ætatibus, ex Ægypto venisse: eoque regnante indigenas Lelegas
appellatos. Clesone vero Lelegis filio Pylan ortum, Pyla Scironem,
cum quo nupta Pandionis filia fuerit. Hunc Scironem et Nisum
Pandionis filium postea de regno disceptantes judicem Æacum
habuisse: adjudicasse illum Niso regnum, ejusque posteris; Scironi
vero totius rei bellicæ imperium. Megareum deinde Neptuni filium,
cui Nisus Iphinoen filiam nuptum dederat, socero in regnum
successisse. Nam de Cretico bello et urbe regnante Niso capta omnia
Megarenses dissimulant.

CAPUT XL.

De memorandis in urbe Megaris — Sithnidibus Nymphis — signis Imperatorum


Romanorum et Dianæ Sospitæ — signis duodecim deorum — Olympieo et
templo Jovis — Megarensium certamine cum Atheniensibus de Salamine —
memorandis in via ad Megarensium arcem Cariam dictam.
In oppido aquæductus est ab Theagene exstructus, quem jam ante
memoravi filiam Cyloni Atheniensi nuptum dedisse. Hic itaque
Theagenes in tyrannide aquæductum illum erexit, opus quum
magnitudine, tum ornatu et columnarum numero valde præclarum.
Aquam influentem Sithnidum Nympharum appellant: et eas quidem
Nymphas indigenas esse dicunt suas, atque ex earum una [filia] Jovi
Megarum natum: ac Megarum quidem Deucalionis diluvium in
Geraniæ verticem effugisse, quum nondum mons ille id nominis
haberet. Nam quod Megarus gruum prætervolantium vocem secutus
illuc natando evasisset, inde monti inditum nomen tradunt. (2) Non
longe ab aquæductu vetus est quædam ædes: in qua exstant ætate
etiam nostra Imperatorum Romanorum imagines, et signum ex ære,
quod Dianæ Sospitæ appellant. Hanc esse cognominis causam
dicunt: quum Persæ, vexato excursionibus Megarico agro, se Thebas
ad Mardonium ducem suum reciperent, obortis Dianæ numine
tenebris, per errorem viarum ad montanam eos regionis partem
deflexisse; ibi ut tentarent, an hostilis exercitus prope esset, sagittas
misisse, ad quarum ictus proxima saxa tanquam gemitus imaginem
redderent; eos vero iterum majori studio sagittas misisse, ita ut in
hostes se jaculari opinantes omnia tela profunderent. (3) Quum vero
illuxisset, Megarenses armatos, contra inermes et ne jacula quidem
habentes impetu facto, magnam ejus agminis partem trucidasse,
atque ex eo Dianæ Sospitæ signum dedicasse. In eodem templo
duodecim deorum signa sunt, Praxitelis, ut ferunt, opus. Dianam
autem Strongylion fecit. (4) Jam vero Jovis lucum ingressus, quem
Olympieum dicunt, templum videas plane insigne, etsi Jovis signum
expolitum non est. Opus enim Peloponnesiacum bellum interpellavit:
per quæ sane tempora Athenienses terrestribus maritimisque copiis
quotannis fere Megarensium publicas et privatas opes vehementer
attriverunt et in extremam miseriam adduxerunt. Ipsius quidem Jovis
os auro et ebore constat: reliquum vero corpus e gypso et fictili est
materia. Opus hoc fecisse dicunt Theocosmum civem suum,
adjuvante Phidia. In Jovis capite Horæ et Parcæ insistunt. Fata enim
Jovi parere, et ejus nutu temporum vicissitudines describi, nemo est
qui nesciat. In templi postica parte ligna quædam sunt duntaxat
informata: quæ Theocosmus auro et ebore fuisset ornaturus ad
signum Jovis absolvendum. (5) In ipso vero templo triremis æneum
rostrum positum est. Eam vero se triremem cepisse Megarenses
dicunt in prœlio navali, quod cum Atheniensibus de Salamine
certantes fecerunt. Neque Athenienses infitiantur, defecisse
aliquando a se ad Megarenses Salaminem: Solonis vero elegis
excitatos de insula prius disceptasse, deinde eam se bello recepisse.
At Megarenses dicunt viros quosdam profugos, quos Dorycleos
nominant, a se ad colonos, qui sorte ducta in Salaminem ante missi
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebooknice.com

You might also like