diff --git a/dotnet-10-research-notes.md b/dotnet-10-research-notes.md
new file mode 100644
index 0000000..afd3a3e
--- /dev/null
+++ b/dotnet-10-research-notes.md
@@ -0,0 +1,360 @@
+
+# .NET 10 Research Notes
+
+## Migration Tasks
+
+> [!INFO] This task are temp
+
+- [ ] install dotnet 10
+- [ ] upgrade dotnet version to `10`
+- [ ] upgrade c# version to `14`
+- [ ] make sure packages fine with dotnet 10
+- Opportunistic Improvements
+ - [ ] Use `CompareOptions.NumericOrdering` property of the `StringComparer`
+ object if it will make things easier
+ - [ ] At first glance, it didn't seem necessary, but if needed, it looks like
+ description support has been added to `ProducesAttribute`,
+ `ProducesResponseTypeAttribute`, and `ProducesDefaultResponseTypeAttribute`
+ - [ ] Use `RedirectHttpResult.IsLocalUrl` in places that check whether the URL
+ redirects to the locale or externally
+ - [ ] Use if necessary, the `field` keyword in properties
+ - [ ] Now allows `nameof` for unbound generics. If there were different
+ approaches previously because it wasn't allowed, these can be simplified
+ - [ ] The partial constructor feature now supported. Use it if we need to
+ - probably, the analyzer will already warn you, but just in case;
+ - [ ] use implicit `Span` conversions to array
+ - [ ] use simple lambda parameters with modifiers
+ - [ ] use Null-Conditional assignment
+ - do if okay after learn
+ - [ ] if it is really necessary, use the validation attributes in response
+ records
+ - [ ] if necessary, edit the response of unhandled errors with
+ `IProblemDetailsService`
+- Required Migrations
+ - [ ] use `.slnx` instead of `.sln`
+ - [ ] use extension members
+ - Property extensions will be used for those that do not take parameters and
+ for specifying layer builders. exp: `configure.Ui.ComponentPresets(...)`
+ - if okay after learn
+ - [ ] use `Microsoft Testing Platform` for testing
+- Troubleshooting & Pitfalls(You should also test the tasks that can be checked
+ to be sure)
+ - `HttpContent` now returns `BrowserHttpReadStream` instead of `MemoryStream`
+ - The warning level for audits has been raised in `dotnet restore`. If the
+ error encountered cannot be resolved, the warning level can be lowered in
+ `Directory.Build.props` or the relevant warning can be ignored
+ - Validation APIs moved to `Microsoft.Extensions.Validation`
+ - If you encounter any issues with OpenAPI, check [here](https://github.com/microsoft/OpenAPI.NET/blob/main/docs/upgrade-guide-2.md)
+ - [ ] If `dotnet restore` is waiting for user input, it should be set to
+ `--interactive false`
+ - [ ] If you encounter an error or receive incorrect results when obtaining
+ coverage, you may need to set `EnableDynamicNativeInstrumentation` to `true`
+ - [ ] Now, in form post actions, `nullable` fields are automatically set to
+ null when they receive an empty string
+
+## Libraries
+
+### Numeric ordering for string comparison
+
+stringlerin sonuna göre sıralama yapıyor.
+
+```csharp
+StringComparer numericStringComparer = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.NumericOrdering);
+
+foreach (string os in new[] { "Windows 11", "Windows 10", "Windows 8" }.Order(numericStringComparer))
+{
+ Console.WriteLine(os);
+}
+
+// Output:
+// Windows 8
+// Windows 10
+// Windows 11
+```
+
+This option isn't valid for the following index-based string operations:
+IndexOf, LastIndexOf, StartsWith, EndsWith, IsPrefix, and IsSuffix.
+
+## Networking
+
+### Streaming HTTP responses enabled by default in browser HTTP clients
+
+The [HttpContent](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpcontent) no longer contains a [MemoryStream](https://learn.microsoft.com/en-us/dotnet/api/system.io.memorystream). Instead, [HttpContent.ReadAsStreamAsync](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpcontent.readasstreamasync) returns a `BrowserHttpReadStream`, which does not support synchronous operations.
+
+```csharp
+var response = await httpClient.GetAsync("https://example.com");
+var contentStream = await response.Content.ReadAsStreamAsync(); // Returns BrowserHttpReadStream instead of MemoryStream
+```
+
+## SDK
+
+### SLNX file format
+
+sln dosyaları slnx olacak
+
+### Support for Microsoft Testing Platform in dotnet test
+
+dotnet test natively supports Microsoft.Testing.Platform. To enable this
+feature, add the following configuration to your global.json file:
+
+```csharp
+{
+ "test": {
+ "runner": "Microsoft.Testing.Platform"
+ }
+}
+```
+
+[MTP](https://learn.microsoft.com/en-us/dotnet/core/testing/microsoft-testing-platform-intro)
+
+### .NET CLI `--interactive` defaults to `true` in user scenarios
+
+bu interactive default olarak true yapılmış. `dotnet restore` tarafında bir sorun çıkarsa
+bundan kaynaklı olabilir. `--interactive false` şeklinde verilerek tekrar kapatılabilir
+
+### Code coverage EnableDynamicNativeInstrumentation defaults to false
+
+büyük ihtimalle bizi etkilemeyecek ama depend edilen kütüphanelerle ilgili problem olursa diye
+not olarak ekliyorum.
+
+coverage collect te EnableDynamicNativeInstrumentation false yapılmış. native araçlardan
+coverage almada sorun çıkarıyor bu flag
+
+### dotnet restore audits transitive packages
+
+audit warningleri default olarak seviye atlatılmış. bizde warningler error olarak gösterildiğinden
+restorelarda sorun yaratabilir.
+
+```xml
+
+
+
+
+yada
+
+
+ NU1901;NU1902;NU1903;NU1904;$(WarningsNotAsErrors)
+
+```
+
+## ASP.NET
+
+### Treating empty string in form post as null for nullable value types
+
+When using the [FromForm] attribute
+
+```csharp
+app.MapPost("/todo", ([FromForm] Todo todo) => TypedResults.Ok(todo));
+
+...
+
+public class Todo
+{
+ public DateOnly? DueDate { get; set; } // Empty strings map to `null`
+}
+```
+
+### Validation support in Minimal APIs
+
+`AddValidation` ile response model'de eklenen attributes'lar ile validasyon yapılabiliyor
+
+```csharp
+app.MapPost("/products",
+ ([EvenNumber(ErrorMessage = "Product ID must be even")] int productId, [Required] string name)
+ => TypedResults.Ok(productId))
+ .DisableValidation();
+//******
+public record Product(
+ [Required] string Name,
+ [Range(1, 1000)] int Quantity);
+```
+
+### `IProblemDetailsService`
+
+bir örnek yap
+Defines a type that provide functionality to create a ProblemDetails response.
+
+Bu 7'den sonra da varmış. Kullanmamışız. Ben yinede ekliyim belki şimdi bazı şeyleri kolaylayabilir.
+
+https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.iproblemdetailsservice?view=aspnetcore-10.0
+
+### Validation APIs moved to `Microsoft.Extensions.Validation`
+
+The validation APIs have moved to the `Microsoft.Extensions.Validation`
+namespace and NuGet package.
+
+### OpenAPI
+
+#### Response description on ProducesResponseType for API controllers
+
+The `ProducesAttribute`, `ProducesResponseTypeAttribute`, and
+`ProducesDefaultResponseTypeAttribute` now accept an optional string parameter,
+`Description`, that sets the description of the response:
+
+```C#
+[HttpGet(Name = "GetWeatherForecast")]
+[ProducesResponseType>(StatusCodes.Status200OK,
+ Description = "The weather forecast for the next 5 days.")]
+public IEnumerable Get()
+{
+```
+
+#### Support for `IOpenApiDocumentProvider` in the DI container
+
+bu servis OpenAPI dokümanını kod içinden programatik olarak alabilmeyi sağlıyor
+
+#### Use HTTP Method Object Instead of Enum
+
+```csharp
+// Before (1.6)
+OpenApiOperation operation = new OpenApiOperation
+{
+ HttpMethod = OperationType.Get
+};
+
+// After (2.0)
+OpenApiOperation operation = new OpenApiOperation
+{
+ HttpMethod = new HttpMethod("GET") // or HttpMethod.Get
+};
+```
+
+[daha fazla 2.0 değişikliği için](https://github.com/microsoft/OpenAPI.NET/blob/main/docs/upgrade-guide-2.md)
+
+### Authentication and authorization
+
+#### Avoid cookie login redirects for known API endpoints
+
+sanırım bu bizi ilgilendirmiyor biz login e redirect etmiyoruz zaten ama yapılan
+şeyi yinede yazayım:
+Artık bilinen API endpoint'lerine yapılan yetkisiz istekler login sayfasına
+yönlendirme yerine doğrudan 401 ve 403 döndürüyor.
+
+### Diğerleri
+
+#### Support for the .localhost Top-Level Domain
+
+```json
+{
+ "profiles": {
+ "https": {
+ "applicationUrl": "https://myapp.dev.localhost:7099;http://myapp.dev.localhost:5036"
+ }
+ }
+}
+```
+
+> [!NOTE]
+>
+> After installing .NET 10 SDK Preview 7, trust the new developer certificate by
+> running dotnet dev-certs https --trust at the command line to ensure your
+> system is configured to trust the new certificate.
+
+#### Detect if URL is local using `RedirectHttpResult.IsLocalUrl`
+
+`RedirectHttpResult.IsLocalUrl` diye bir helper gelmiş. url veriyorsun oradaki
+redirecturl locale e mi gidecek diye bakıyor. locale se true dönüyor.
+
+#### Exception diagnostics are suppressed when IExceptionHandler.TryHandleAsync returns true
+
+`IExceptionHandler` ile exception'ları handle ettiğinde(true döndüğünde) artık o exception
+için otomatik olarak log ve telemetry yazılmıyor
+
+## C# 14
+
+### Extension members
+
+yeni extension yazma yöntemleri geldi
+bu syntax a geçilecek
+
+```csharp
+public static class Enumerable
+{
+ // Extension block
+ extension(IEnumerable source) // extension members for IEnumerable
+ {
+ // Extension property:
+ public bool IsEmpty => !source.Any();
+
+ // Extension method:
+ public IEnumerable Where(Func predicate) { ... }
+ }
+
+ // extension block, with a receiver type only
+ extension(IEnumerable) // static extension members for IEnumerable
+ {
+ // static extension method:
+ public static IEnumerable Combine(IEnumerable first, IEnumerable second) { ... }
+
+ // static extension property:
+ public static IEnumerable Identity => Enumerable.Empty();
+
+ // static user defined operator:
+ public static IEnumerable operator + (IEnumerable left, IEnumerable right) => left.Concat(right);
+ }
+}
+```
+
+### `field`
+
+artık field tanımlamaya gerek yok
+
+```csharp
+public string Name
+{
+ get;
+ set => field = value ?? throw new ArgumentNullException(nameof(value));
+}
+```
+
+### Implicit Span Conversions
+
+Span `` ve ReadOnlySpan `` için, ReadOnlySpan ``, Span `` ve T[] türlerine
+implicit cast gelmiş
+
+```csharp
+int[] array = new[] { 1, 2, 3 };
+ReadOnlySpan ros = array;
+
+void Process(ReadOnlySpan data) { }
+Process(array);
+```
+
+### `nameof` Unbound Generic Types
+
+aşağıdaki işlemlere izin veriliyormuş
+
+```csharp
+nameof(List<>)
+nameof(Dictionary<,>)
+```
+
+### Simple lambda parameters with modifiers
+
+scoped, ref, in, out, or ref readonly gibi lambda expression parametrelerinde
+type belirtme biraz daha hafiflemiş. bunlarda analyzerlar önerileri veriyor zaten
+
+```csharp
+TryParse parse2 = (string text, out int result) => Int32.TryParse(text, out result);
+```
+
+### partial members
+
+artık instance constructors ve events partial olabiliyormuş
+
+### User-Defined Compound Assignment
+
+sanırım eskiden +=, -=, *= gibi operatorleri kendin yazamıyordun. artık
+yazılabiliyor gibi
+
+tam olarak hangilerine izin var tam anlamadım https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-14.0/user-defined-compound-assignment
+
+### Null-Conditional Assignment
+
+atamalarda if ile not null kontrolüne gerek kalmamış
+
+```csharp
+customer?.Order = GetCurrentOrder();
+```
+
+ama +=, -= falan desteklemiyor