DotNetCoreOutputToConsole 1.0.0
dotnet add package DotNetCoreOutputToConsole --version 1.0.0
NuGet\Install-Package DotNetCoreOutputToConsole -Version 1.0.0
<PackageReference Include="DotNetCoreOutputToConsole" Version="1.0.0" />
<PackageVersion Include="DotNetCoreOutputToConsole" Version="1.0.0" />
<PackageReference Include="DotNetCoreOutputToConsole" />
paket add DotNetCoreOutputToConsole --version 1.0.0
#r "nuget: DotNetCoreOutputToConsole, 1.0.0"
#:package DotNetCoreOutputToConsole@1.0.0
#addin nuget:?package=DotNetCoreOutputToConsole&version=1.0.0
#tool nuget:?package=DotNetCoreOutputToConsole&version=1.0.0
DotNetCoreOutputToConsole
A lightweight ASP.NET Core helper library that allows developers to output logs, variables, and errors directly into the browser console using inline <script> injection.
Ideal for Development, Debug, and UAT environments.
๐ฅ Download
You can download the full source code from your GitHub repository once uploaded:
https://github.com/<your-account>/DotNetCoreOutputToConsole
If you need a GitHub release ZIP template, just tell me.
โจ Features
- Write messages directly to browser DevTools console
- Supports multiple console API functions:
console.logconsole.infoconsole.warnconsole.errorconsole.traceconsole.table
- Automatically JSON-encodes objects (safe for XSS)
- Easy integration with ASP.NET Core
- Only runs in:
- Development
- Staging
- UAT
- Works with:
- Minimal API
- MVC
- Razor Pages
โ Not Supported
This library does NOT support Blazor Web App, Blazor Server, or Blazor WebAssembly.
Blazor does NOT execute inline <script> inside its rendering pipeline.
To support Blazor, a JSInterop-based version would be required (future extension).
๐ฆ Installation
Add the library project reference:
<ProjectReference Include="..\DotNetCoreOutputToConsole\DotNetCoreOutputToConsole.csproj" />
Or include the source project directly in your solution.
โ Environment Setup
Set the environment name so console output only appears in safe environments:
ConsoleOutputSettings.CurrentEnvironment = builder.Environment.EnvironmentName;
The library will ONLY output console messages when the environment is:
DevelopmentStagingUAT
In Production, all calls become no-ops (silently ignored).
๐ Usage Examples
โญ Minimal API Example
app.MapGet("/test", async ctx =>
{
await BrowserConsole.Log(ctx.Response, "Hello from Minimal API");
await BrowserConsole.Info(ctx.Response, new { User = "livecode", Time = DateTime.UtcNow });
await BrowserConsole.Warn(ctx.Response, "This is a warning");
await BrowserConsole.Error(ctx.Response, "This is an error");
await BrowserConsole.Trace(ctx.Response, "Trace message");
await BrowserConsole.Table(ctx.Response, new[] {
new { Id = 1, Name = "Item A" },
new { Id = 2, Name = "Item B" }
});
await ctx.Response.WriteAsync("<h3>Console test complete โ open DevTools.</h3>");
});
โญ MVC Example
Controller
public class HomeController : Controller
{
public IActionResult Index()
{
BrowserConsole.Log(Response, "MVC HomeController loaded");
BrowserConsole.Info(Response, new { Page = "Home/Index", Time = DateTime.UtcNow });
BrowserConsole.Warn(Response, "This is a test warning from MVC");
BrowserConsole.Error(Response, new { Error = "Something failed", Code = 500 });
return View();
}
}
View (Views/Home/Index.cshtml)
<h2>MVC Console Test Page</h2>
<p>Check your browser console.</p>
โญ Razor Pages Example
Pages/Index.cshtml.cs
public class IndexModel : PageModel
{
public void OnGet()
{
BrowserConsole.Info(Response, "Razor Page Loaded");
BrowserConsole.Table(Response, new[] {
new { Id = 1, Description = "Razor Row 1" },
new { Id = 2, Description = "Razor Row 2" }
});
}
}
Pages/Index.cshtml
@page
@model IndexModel
<h3>Razor Pages Console Test</h3>
<p>Open browser DevTools โ Console.</p>
๐งฉ Console API Supported
| Function | Method in Library | Example Usage |
|---|---|---|
console.log |
BrowserConsole.Log() |
await BrowserConsole.Log(Response, "msg"); |
console.info |
BrowserConsole.Info() |
await BrowserConsole.Info(Response, obj); |
console.warn |
BrowserConsole.Warn() |
await BrowserConsole.Warn(Response, "warn"); |
console.error |
BrowserConsole.Error() |
await BrowserConsole.Error(Response, ex); |
console.trace |
BrowserConsole.Trace() |
await BrowserConsole.Trace(Response, "trace"); |
console.table |
BrowserConsole.Table() |
await BrowserConsole.Table(Response, list); |
All methods serialize objects to JSON and safely embed them into <script> blocks, which are then executed by the browser.
๐ Security Notes
- Objects are JSON-encoded before being written into the script.
- Output is restricted to non-production environments via
ConsoleOutputSettings. - If writing to the response fails (stream closed, headers sent, etc.), the library will silently ignore the error so it never breaks your application behavior.
๐ Project Structure
A typical solution layout:
DotNetCoreOutputToConsole/
โ
โโโ src/
โ โโโ DotNetCoreOutputToConsole/
โ โ โโโ DotNetCoreOutputToConsole.csproj
โ โ โโโ BrowserConsole.cs
โ โ โโโ Config/
โ โ โโโ ConsoleOutputSettings.cs
โ โ
โ โโโ DotNetCoreOutputToConsole.Tests/
โ โ โโโ DotNetCoreOutputToConsole.Tests.csproj
โ โ โโโ BrowserConsoleTests.cs
โ โ โโโ Config/
โ โ โโโ ConsoleOutputSettingsTests.cs
โ โ
โ โโโ MinimalApiConsoleTestApp/
โ โ โโโ MinimalApiConsoleTestApp.csproj
โ โ โโโ Program.cs
โ โ
โ โโโ MvcConsoleTestApp/
โ โ โโโ MvcConsoleTestApp.csproj
โ โ โโโ Program.cs
โ โ โโโ Controllers/
โ โ โ โโโ HomeController.cs
โ โ โโโ Views/
โ โ โโโ Home/
โ โ โโโ Index.cshtml
โ โ
โ โโโ RazorPagesConsoleTestApp/
โ โโโ RazorPagesConsoleTestApp.csproj
โ โโโ Program.cs
โ โโโ Pages/
โ โโโ Index.cshtml
โ โโโ Index.cshtml.cs
โ
โโโ README.md
๐งช Unit Tests
Unit tests (in DotNetCoreOutputToConsole.Tests) may include:
- Verifying console script injection content contains the correct function (log/info/warn/error/trace/table).
- Ensuring no content is written when environment is Production.
- Verifying that different message types (string, object, collections) serialize correctly to JSON.
Example snippet:
[Fact]
public async Task Log_WritesConsoleLogScriptInDev()
{
ConsoleOutputSettings.CurrentEnvironment = "Development";
var ctx = new DefaultHttpContext();
ctx.Response.Body = new MemoryStream();
await BrowserConsole.Log(ctx.Response, "Test message");
ctx.Response.Body.Seek(0, SeekOrigin.Begin);
var html = new StreamReader(ctx.Response.Body).ReadToEnd();
Assert.Contains("console.log", html);
Assert.Contains("Test message", html);
}
๐ค Author
livecode
๐ License
MIT License โ see LICENSE.
โญ Support This Project
If this library makes your ASP.NET Core debugging easier, consider giving it a โญ on GitHub!
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Microsoft.AspNetCore.Http (>= 2.3.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 195 | 11/15/2025 |
Initial release of DotNetCoreOutputToConsole.