<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
  <channel xmlns:media="http://search.yahoo.com/mrss/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <title>ABP.IO Stories</title>
    <link>https://abp.io/community/articles</link>
    <description>A hub for ABP Framework, .NET, and software development. Access articles, tutorials, news, and contribute to the ABP community.</description>
    <lastBuildDate>Thu, 12 Mar 2026 13:00:50 Z</lastBuildDate>
    <generator>Community - ABP.IO</generator>
    <image>
      <url>https://abp.io/assets/favicon.ico/favicon-32x32.png</url>
      <title>ABP.IO Stories</title>
      <link>https://abp.io/community/articles</link>
    </image>
    <a10:link rel="self" type="application/rss+xml" title="self" href="https://abp.io/community/rss?member=dboutwell" />
    <item>
      <guid isPermaLink="true">https://abp.io/community/posts/logging-to-datadog-from-abp-framework-fm4ozds4</guid>
      <link>https://abp.io/community/posts/logging-to-datadog-from-abp-framework-fm4ozds4</link>
      <a10:author>
        <a10:name>dboutwell</a10:name>
        <a10:uri>https://abp.io/community/members/dboutwell</a10:uri>
      </a10:author>
      <category>datadog</category>
      <category>logging</category>
      <title>Logging to Datadog from ABP framework</title>
      <description>This tutorial is a quick and easy walkthrough in getting your ABP application to log to Datadog via the ingestion api and some useful information about how to leverage those logs inside Datadog to your advantage.</description>
      <pubDate>Sat, 03 Sep 2022 17:44:51 Z</pubDate>
      <a10:updated>2026-03-02T13:35:20Z</a10:updated>
      <content:encoded><![CDATA[This tutorial is a quick and easy walkthrough in getting your ABP application to log to Datadog via the ingestion api and some useful information about how to leverage those logs inside Datadog to your advantage.<br \><a href="https://byteology.co/blogs/tutorials/logging-to-datadog-from-abp-framework" rel="nofollow noopener noreferrer" title="Go to the Post">Go to the Post</a>]]></content:encoded>
      <media:thumbnail url="https://abp.io/images/others/blank-cover-image-150_79.png" />
      <media:content url="https://abp.io/images/others/blank-cover-image-150_79.png" medium="image" />
    </item>
    <item>
      <guid isPermaLink="true">https://abp.io/community/posts/configuring-multiple-dbcontexts-in-an-abp-framework-project-uoz5is3o</guid>
      <link>https://abp.io/community/posts/configuring-multiple-dbcontexts-in-an-abp-framework-project-uoz5is3o</link>
      <a10:author>
        <a10:name>dboutwell</a10:name>
        <a10:uri>https://abp.io/community/members/dboutwell</a10:uri>
      </a10:author>
      <category>multiple-contexts</category>
      <category>entity-framework-core</category>
      <category>mongodb</category>
      <title>Configuring Multiple DbContexts in an ABP Framework Project</title>
      <description>This article is designed to walk you through the basic steps to extend your ABP Framework solution and to take advantage of a multi-database architecture.</description>
      <pubDate>Mon, 29 Aug 2022 21:13:51 Z</pubDate>
      <a10:updated>2026-03-12T07:26:31Z</a10:updated>
      <content:encoded><![CDATA[This article is designed to walk you through the basic steps to extend your ABP Framework solution and to take advantage of a multi-database architecture.<br \><a href="https://byteology.co/blogs/tutorials/configuring-multiple-dbcontexts-in-an-abp-framework-project" rel="nofollow noopener noreferrer" title="Go to the Post">Go to the Post</a>]]></content:encoded>
      <media:thumbnail url="https://abp.io/images/others/blank-cover-image-150_79.png" />
      <media:content url="https://abp.io/images/others/blank-cover-image-150_79.png" medium="image" />
    </item>
    <item>
      <guid isPermaLink="true">https://abp.io/community/posts/connect-an-abp-application-with-openiddict-to-zapier-part-3-dj52kyhd</guid>
      <link>https://abp.io/community/posts/connect-an-abp-application-with-openiddict-to-zapier-part-3-dj52kyhd</link>
      <a10:author>
        <a10:name>dboutwell</a10:name>
        <a10:uri>https://abp.io/community/members/dboutwell</a10:uri>
      </a10:author>
      <category>openiddict</category>
      <category>cmskit</category>
      <category>Zapier</category>
      <title>Connect an ABP application with OpenIddict to Zapier - Part 3</title>
      <description>This article builds on the foundation established in Part 1 of the series to show you how you can extend the functionality of your system with Zapier so you don't have to build and maintain a separate API code base for each interaction. Specifically, this will show a real-world scenario where you extend the functionality of the CMSKit pro commercial module to automatically share newly created blog posts to various social media.</description>
      <pubDate>Fri, 05 Aug 2022 00:04:48 Z</pubDate>
      <a10:updated>2026-03-03T03:49:38Z</a10:updated>
      <content:encoded><![CDATA[This article builds on the foundation established in Part 1 of the series to show you how you can extend the functionality of your system with Zapier so you don't have to build and maintain a separate API code base for each interaction. Specifically, this will show a real-world scenario where you extend the functionality of the CMSKit pro commercial module to automatically share newly created blog posts to various social media.<br \><a href="https://byteology.co/blogs/tutorials/connect-an-abp-application-with-openiddict-to-zapier-part-3" rel="nofollow noopener noreferrer" title="Go to the Post">Go to the Post</a>]]></content:encoded>
      <media:thumbnail url="https://abp.io/images/others/blank-cover-image-150_79.png" />
      <media:content url="https://abp.io/images/others/blank-cover-image-150_79.png" medium="image" />
    </item>
    <item>
      <guid isPermaLink="true">https://abp.io/community/posts/connect-an-abp-application-with-openiddict-to-zapier-part-2-fuvf4kpm</guid>
      <link>https://abp.io/community/posts/connect-an-abp-application-with-openiddict-to-zapier-part-2-fuvf4kpm</link>
      <a10:author>
        <a10:name>dboutwell</a10:name>
        <a10:uri>https://abp.io/community/members/dboutwell</a10:uri>
      </a10:author>
      <category>openiddict</category>
      <category>Zapier</category>
      <title>Connect an ABP application with OpenIddict to Zapier - Part 2</title>
      <description>This article builds on the foundation established in Part 1 of the series to show you how you can extend the functionality of your system with Zapier so you don't have to build and maintain a separate API code base for each interaction.</description>
      <pubDate>Wed, 03 Aug 2022 04:35:10 Z</pubDate>
      <a10:updated>2026-03-03T03:48:30Z</a10:updated>
      <content:encoded><![CDATA[This article builds on the foundation established in Part 1 of the series to show you how you can extend the functionality of your system with Zapier so you don't have to build and maintain a separate API code base for each interaction.<br \><a href="https://byteology.co/blogs/tutorials/connect-an-abp-application-with-openiddict-to-zapier-part-2" rel="nofollow noopener noreferrer" title="Go to the Post">Go to the Post</a>]]></content:encoded>
      <media:thumbnail url="https://abp.io/images/others/blank-cover-image-150_79.png" />
      <media:content url="https://abp.io/images/others/blank-cover-image-150_79.png" medium="image" />
    </item>
    <item>
      <guid isPermaLink="true">https://abp.io/community/posts/connect-an-abp-application-with-openiddict-to-zapier-part-1-govtcsri</guid>
      <link>https://abp.io/community/posts/connect-an-abp-application-with-openiddict-to-zapier-part-1-govtcsri</link>
      <a10:author>
        <a10:name>dboutwell</a10:name>
        <a10:uri>https://abp.io/community/members/dboutwell</a10:uri>
      </a10:author>
      <category>openiddict</category>
      <category>Zapier</category>
      <title>Connect an ABP application with OpenIddict to Zapier - Part 1</title>
      <description>This article is designed to walk you through the steps to configure an ABP Framework application, using the OpenIddict module for an identity server, to integrate with Zapier to enhance your application's automation capabilities.</description>
      <pubDate>Wed, 03 Aug 2022 04:34:34 Z</pubDate>
      <a10:updated>2026-03-11T18:57:07Z</a10:updated>
      <content:encoded><![CDATA[This article is designed to walk you through the steps to configure an ABP Framework application, using the OpenIddict module for an identity server, to integrate with Zapier to enhance your application's automation capabilities.<br \><a href="https://byteology.co/blogs/tutorials/connect-an-abp-application-with-openiddict-to-zapier-part-1" rel="nofollow noopener noreferrer" title="Go to the Post">Go to the Post</a>]]></content:encoded>
      <media:thumbnail url="https://abp.io/images/others/blank-cover-image-150_79.png" />
      <media:content url="https://abp.io/images/others/blank-cover-image-150_79.png" medium="image" />
    </item>
    <item>
      <guid isPermaLink="true">https://abp.io/community/posts/password-required-redis-with-abp-framework-and-docker-94old5rm</guid>
      <link>https://abp.io/community/posts/password-required-redis-with-abp-framework-and-docker-94old5rm</link>
      <a10:author>
        <a10:name>dboutwell</a10:name>
        <a10:uri>https://abp.io/community/members/dboutwell</a10:uri>
      </a10:author>
      <category>redis</category>
      <category>docker</category>
      <title>Password required Redis with ABP Framework and Docker</title>
      <description>This article is designed to walk you through the steps of spinning up a Redis container via Docker Desktop, then modifying your ABP framework application to utilize that image. This will also work for any authenticated Redis instance you have.

In this article, we will walk through the step by step process to launch a Redis container in Docker Desktop, build a new ABP application, then configure the Redis caching service in the application to work with the docker image.

</description>
      <pubDate>Fri, 15 Jul 2022 23:32:23 Z</pubDate>
      <a10:updated>2026-03-12T10:00:55Z</a10:updated>
      <content:encoded><![CDATA[<h1>Password required Redis with ABP Framework and Docker</h1>
<h2>Introduction</h2>
<p>This article is designed to walk you through the steps of spinning up a Redis container via Docker Desktop, then modifying your ABP framework application to utilize that image. This will also work for any authenticated Redis instance you have.</p>
<p>In this article, we will walk through the step by step process to launch a Redis container in Docker Desktop, build a new ABP application, then configure the Redis caching service in the application to work with the docker image.</p>
<p>This code setup will also work for using an authenticated instance of Redis for the startup packages available in the commercial ABP Suite with an included public website.</p>
<h2>Source Code</h2>
<p>The source code of the basic application is available <a href="https://github.com/Byteology-LLC/RedisDemo">on Github</a>.</p>
<h2>Requirements</h2>
<p>The following tools are needed to be able to run the solution.</p>
<ul>
<li>.NET 6.0 SDK</li>
<li>Visual Studio 2022 (or another compatible IDE)</li>
<li>MongoDB Server</li>
<li><a href="https://www.docker.com/products/docker-desktop/">Docker Desktop</a> is installed and ready</li>
</ul>
<h2>Development</h2>
<h3>Running the Redis image</h3>
<p>Redis is a very popular docker image, so your docker desktop MIGHT have a link to run a new Redis instance right on the &quot;Containers&quot; tab like so:
<img src="https://raw.githubusercontent.com/Byteology-LLC/RedisDemo/main/images/redis_on_container_tab.png" alt="Redis on container tab in docker desktop" /></p>
<p>If that is the case, go ahead and hit the run button and note the connection string provided on the &quot;Redis Overview&quot; panel, then move onto the next step.
<img src="https://raw.githubusercontent.com/Byteology-LLC/RedisDemo/main/images/redis_overview.png" alt="Redis Overview panel screenshot" /></p>
<p>If you don't see the Redis card on the &quot;Containers&quot; tab, do the following:</p>
<ul>
<li>Open a command prompt</li>
<li>Run the command <code>docker pull redis</code></li>
<li>Run the command <code>docker run --name redis -d -p 6379:6379 redis redis-server --requirepass &quot;redispw&quot;</code></li>
</ul>
<p>If you are unable to use port 6379 on your host, change the -p parameter of the command to an available port on the host in the format -p {host port}:{container port}. I.e. -p 42789:6379. Either way, remember the port you used.</p>
<h3>Testing / Monitoring Redis</h3>
<p>Open Docker Desktop and navigate to the &quot;Containers&quot; tab. Locate your Redis container (my image has 2 because I ran a container using both of the methods described above, yours should only have one) and click on the &quot;Open in Terminal&quot; button show below:
<img src="https://raw.githubusercontent.com/Byteology-LLC/RedisDemo/main/images/open_in_terminal.png" alt="Image highlighting the Open in Terminal button on the Container tab in Docker Desktop" /></p>
<p>Once the terminal opens, run the following commands:</p>
<ul>
<li><code>redis-cli</code></li>
<li><code>auth default redispw</code></li>
<li><code>monitor</code></li>
</ul>
<p>You should get an 'OK' response after the auth and monitor commands, as seen in the image below:
<img src="https://raw.githubusercontent.com/Byteology-LLC/RedisDemo/main/images/redis_monitor_commands.png" alt="Screenshot of commands and responses in a terminal window" /></p>
<p>This means that the Redis server is running and you are able to successfully log into it. Keep the monitoring window open so you can see the cache working when you run your application later.</p>
<h3>Creating a new Application</h3>
<p>Use the following ABP CLI command to create the application</p>
<pre><code>abp new RedisDemo -t app -u mvc --mobile none --database-provider mongodb -csf
</code></pre>
<p>Open the solution in your IDE of choice, validate the connection string in the <strong>appsettings.json</strong> files in both the <strong>dbmigrator</strong> and <strong>web</strong> projects, then run the dbmigrator console app to seed your database.</p>
<h3>Install the Volo.Abp.Caching.StackExchangeRedis NuGet package</h3>
<p>Using your favorite method for NuGet package installation, install the Volo.Abp.Caching.StackExchangeRedis package onto the <strong>RedisDemo.Web</strong> project.</p>
<p>Using the Package Manager Console, run this command:</p>
<pre><code>Install-Package Volo.Abp.Caching.StackExchangeRedis
</code></pre>
<h3>ABP Redis Caching Setup</h3>
<p>In your <strong>Web</strong> project, open the <code>appsettings.json</code> file and add the following section to the end of the document:</p>
<pre><code>&quot;Redis&quot;: {
    &quot;Host&quot;: &quot;localhost:6379&quot;,
    &quot;User&quot;: &quot;default&quot;
  }
</code></pre>
<p>Change the Host section to match your needs. For external services you can use a DNS or IP address. For example:
<em>&quot;test.byteology.co:42637&quot;</em> is a valid example. For our instances here, if you used a different host port when you spun up the Redis server, substitute that in the configuration file</p>
<p>Then open the <code>appsettings.secrets.json</code> file and add the following section:</p>
<pre><code>&quot;Redis&quot;: {
    &quot;Password&quot;: &quot;redispw&quot;
  }
</code></pre>
<p>The files should look something like this:
<img src="https://raw.githubusercontent.com/Byteology-LLC/RedisDemo/main/images/appsettings_redis_config.png" alt="Screenshot of appsettings.json files" /></p>
<p>Open the <code>RedisDemoWebModule.cs</code> file and add the following USING statements:</p>
<pre><code>using Microsoft.Extensions.Caching.StackExchangeRedis;
using StackExchange.Redis;
</code></pre>
<p>Add the following line just above your <code>RedisDemoWebModule</code> class declaration:</p>
<pre><code>[DependsOn(typeof(AbpCachingStackExchangeRedisModule))]
</code></pre>
<p>Then add the following code in your <code>ConfigureServices</code> method:</p>
<pre><code>Configure&lt;RedisCacheOptions&gt;(options =&gt;
{
    var configurationOptions = ConfigurationOptions.Parse(configuration[&quot;Redis:Host&quot;]);
    configurationOptions.User = configuration[&quot;Redis:User&quot;];
    configurationOptions.Password = configuration[&quot;Redis:Password&quot;];
    configurationOptions.ChannelPrefix = &quot;RedisDemo:&quot;;
    options.ConfigurationOptions = configurationOptions;
});
</code></pre>
<p>That's all the configuration you need! This sets the hostname, port, user and password values pulled from your <code>appsettings.json</code> file.</p>
<p>When you run the application, the terminal instance that you had running the &quot;Monitor&quot; command from earlier should show a lot of activity now, indicating that the system is working as expected!
<img src="https://raw.githubusercontent.com/Byteology-LLC/RedisDemo/main/images/redis_monitor_activity.png" alt="Screenshot of terminal window monitoring Redis activity" /></p>
]]></content:encoded>
      <media:thumbnail url="https://abp.io/images/others/blank-cover-image-150_79.png" />
      <media:content url="https://abp.io/images/others/blank-cover-image-150_79.png" medium="image" />
    </item>
  </channel>
</rss>