<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Masaki Yamamoto</title>
    <description>The latest articles on DEV Community by Masaki Yamamoto (@nnasaki).</description>
    <link>https://dev.to/nnasaki</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F700055%2F1322e5bc-517a-4e72-a58f-37f8f8e4a6e7.png</url>
      <title>DEV Community: Masaki Yamamoto</title>
      <link>https://dev.to/nnasaki</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nnasaki"/>
    <language>en</language>
    <item>
      <title>How to add a minimally configured Web API to Sitecore XM/XP 10.2</title>
      <dc:creator>Masaki Yamamoto</dc:creator>
      <pubDate>Fri, 19 Aug 2022 07:46:04 +0000</pubDate>
      <link>https://dev.to/nnasaki/how-to-add-a-minimally-configured-web-api-to-sitecore-xmxp-102-256</link>
      <guid>https://dev.to/nnasaki/how-to-add-a-minimally-configured-web-api-to-sitecore-xmxp-102-256</guid>
      <description>&lt;p&gt;There are many situations where you may want to use data stored in Sitecore XM or XP on an external site, and this step-by-step guide explains how to add a customized Web API on Sitecore XM/XP 10.2.&lt;/p&gt;

&lt;h1&gt;
  
  
  System Requirements
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Visual Studio 2019 or higher (The author's environment is Visual Studio 2022)&lt;/li&gt;
&lt;li&gt;NET Framework 4.8&lt;/li&gt;
&lt;li&gt;Windows 10&lt;/li&gt;
&lt;li&gt;Sitecore XM/XP 10.2&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Target audience
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Sitecore Developers&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Preparation
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Add Sitecore to NuGet package sources
&lt;/h2&gt;

&lt;p&gt;Open Visual Studio configuration.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsuzkisr6lk2mnsro22m2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsuzkisr6lk2mnsro22m2.png" width="679" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;select Package Sources&lt;/li&gt;
&lt;li&gt;click on +&lt;/li&gt;
&lt;li&gt;Select the added Package srouces&lt;/li&gt;
&lt;li&gt;Enter &lt;code&gt;Sitecore&lt;/code&gt; for Name and &lt;code&gt;https://sitecore.myget.org/F/sc-packages/api/v3/index.json&lt;/code&gt; for Source&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Update&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;OK&lt;/code&gt;.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F99o3tvc0lus9rzquwxow.png" width="800" height="437"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's all.&lt;/p&gt;
&lt;h1&gt;
  
  
  Complete Repository
&lt;/h1&gt;

&lt;p&gt;Here is the completed source so you can build and try it out right away.&lt;br&gt;
&lt;a href="https://github.com/nnasaki/SimpleWebApi" rel="noopener noreferrer"&gt;https://github.com/nnasaki/SimpleWebApi&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Steps to create a new solution
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Create new solution
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5qm0a8vmw2fc1wadigfk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5qm0a8vmw2fc1wadigfk.png" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;code&gt;ASP.NET Web Application(.NET Framework)&lt;/code&gt;, note that it is not ASP.NET Core.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj25fgtwh02ee8tow1yg7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj25fgtwh02ee8tow1yg7.png" width="799" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter the Project name. Make sure again that the Framework is &lt;code&gt;.NET Framework 4.8&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyngn52jgnbn25aramssa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyngn52jgnbn25aramssa.png" width="799" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;code&gt;Empty&lt;/code&gt; as the Project Type. Uncheck all the checkboxes on the right side.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyym6x7zifklzrmhxox41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyym6x7zifklzrmhxox41.png" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Press &lt;code&gt;Create&lt;/code&gt; to finish creating a new solution and project.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F75ixtddcno1uodk5im01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F75ixtddcno1uodk5im01.png" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Add a NuGet package
&lt;/h2&gt;

&lt;p&gt;From Visual Studio &lt;code&gt;Tools&lt;/code&gt;, click &lt;code&gt;Package Manager Console&lt;/code&gt; under &lt;code&gt;Nuget Package Manager&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8dihap962f77xgzryp09.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8dihap962f77xgzryp09.png" width="799" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When the &lt;code&gt;Package Manager Console&lt;/code&gt; appears at the bottom of the screen, type &lt;code&gt;Install-Package Sitecore.Services.Infrastructure&lt;/code&gt; !&lt;br&gt;
&lt;a href="https://storage.googleapis.com/zenn-user-upload/23547733c82a-20220819.png" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you see &lt;code&gt;Successfully installed&lt;/code&gt; like this, it is successful. It took about 2 minutes in my environment.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhp5f23g97kmwz4ewhrp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhp5f23g97kmwz4ewhrp.png" width="796" height="380"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Add controllers
&lt;/h2&gt;

&lt;p&gt;Add a folder of &lt;code&gt;Controllers&lt;/code&gt; and add a class&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafk2na49eaq13mt7qd05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafk2na49eaq13mt7qd05.png" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter &lt;code&gt;SimpleWebApiController&lt;/code&gt; and click Add &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvukghmpflda60bnwfedy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvukghmpflda60bnwfedy.png" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter the following code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Sitecore.Services.Infrastructure.Web.Http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Web.Http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Web.Http.Cors&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;SimpleWebApi.Controllers&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// TODO Be sure to narrow down the CORS settings in the production environment. This is all allowed.&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;EnableCors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;origins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SimpleWebApiController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ServicesApiController&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;SimpleWebApiController&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;Stats&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"ok SimpleWebApi"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Add route definition
&lt;/h2&gt;

&lt;p&gt;Same procedure as for the controller. Add the &lt;code&gt;Pipelines&lt;/code&gt; folder and add the &lt;code&gt;RegisterHttpRoutes&lt;/code&gt; class.&lt;/p&gt;

&lt;p&gt;Enter the following code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Web.Http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Sitecore.Pipelines&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;SimpleWebApi.Pipelines&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RegisterHttpRoutes&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PipelineArgs&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;GlobalConfiguration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Configure&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HttpConfiguration&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;routes&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Routes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapHttpRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SimpleWebApi.stats"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"api/simplewebapi/stats"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;controller&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"SimpleWebApi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Stats"&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;

        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Add config.
&lt;/h2&gt;

&lt;p&gt;Create a hierarchical folder &lt;code&gt;App_Config\Include\ZZZZZ_CustomConfigs&lt;/code&gt; and add &lt;code&gt;SimpleWebApi.config&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi21ow5hmjgdgghilrvwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi21ow5hmjgdgghilrvwl.png" width="284" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter the following settings&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"
               xmlns:set="http://www.sitecore.net/xmlconfig/set/"
               xmlns:role="http://www.sitecore.net/xmlconfig/role/"&amp;gt;
  &amp;lt;sitecore&amp;gt;
    &amp;lt;pipelines&amp;gt;
      &amp;lt;initialize&amp;gt;
        &amp;lt;processor
           type="SimpleWebApi.Pipelines.RegisterHttpRoutes, SimpleWebApi" /&amp;gt;
      &amp;lt;/initialize&amp;gt; 
    &amp;lt;/pipelines&amp;gt;
  &amp;lt;/sitecore&amp;gt;
&amp;lt;/configuration&amp;gt;
```

## Deploy
Deploy the built module
### Add dll to bin
Copy the `SimpleWebApi.dll` created in the project `bin` to `C:\inetpub\wwwroot\sitecoresc.dev.local\bin` in IIS. Rewrite the `sitecoresc.dev.local` part in your environment.
! [](https://storage.googleapis.com/zenn-user-upload/ca257d9e4861-20220819.png)

### Add configurations to include
Copy `SimpleWebApi.config` added to the project to `C:\inetpub\wwwroot\sitecoresc.dev.local\App_Config\Include\ZZZZZ_CustomConfigs`.
![](https://storage.googleapis.com/zenn-user-upload/22cb2b397f05-20220819.png)

# Check the operation
## Access the API
Access the site where Sitecore is deployed using a browser.
In this example, access `https://sitecoresc.dev.local/api/simplewebapi/stats` and check it.

If the deployment is successful, you will see a simple `"ok SimpleWebApi"` as shown below.
![](https://storage.googleapis.com/zenn-user-upload/bf2be6dbcf00-20220819.png)

If you encounter errors, please see Troubleshooting.

# Summary
As shown in this article, Sitecore can be easily customized, so please try it out.

# Troubleshooting
Here is a summary of the errors I encountered while trying it out and how I handled them.

## No type was found that matches the controller named 'MinimumTest4'
### Error details.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;{"Message": "No HTTP resource was found that matches the request URI '&lt;a href="https://sitecoresc.dev.local/api/minimumtest4/stats'" rel="noopener noreferrer"&gt;https://sitecoresc.dev.local/api/minimumtest4/stats'&lt;/a&gt;." , "MessageDetail": "No type was found that matches the controller named 'MinimumTest4'"}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![](https://storage.googleapis.com/zenn-user-upload/95fde7408b22-20220819.png)
### Solution.
There are two patterns.
#### 1. Controller name is incorrectly set in MapHttpRoute.
Please check if the controller name is correct. If `MinimumTest4Controller` is the controller name, specify up to `MinimumTest4` without `Controller`.
![](https://storage.googleapis.com/zenn-user-upload/2da6703ce68a-20220819.png)

#### 2. optimizeCompilations="true" is enabled in Web.config
In Web.config, set `&amp;lt;compilation defaultLanguage="c#" debug="true" targetFramework="4.8" optimizeCompilations="true"&amp;gt;` like this If `optimizeCompilations` is `true`, set `optimizeCompilations="false"`.

`optimizeCompilations` is a feature that can speed up reloading when updating modules, but new pipeline processors may not be recognized. It is usually better to set it to `false`.

## A route named 'MinimumTestApi.stats' is already in the route collection. Route names must be unique.
### Error details.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;br&gt;
Server Error in '/' Application.&lt;br&gt;
A route named 'MinimumTestApi.stats' is already in the route collection.&lt;br&gt;
Parameter name: name&lt;br&gt;
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.&lt;/p&gt;

&lt;p&gt;Exception Details: System.ArgumentException: A route named 'MinimumTestApi.stats' is already in the route collection.&lt;br&gt;
Parameter name: name&lt;/p&gt;

&lt;p&gt;Source Error:&lt;/p&gt;

&lt;p&gt;An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgwna6o31pdr942r6hl3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgwna6o31pdr942r6hl3n.png" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;The definition name of &lt;code&gt;MapHttpRoute&lt;/code&gt; is shared by another module. Change the definition name of &lt;code&gt;MapHttpRoute&lt;/code&gt; in &lt;code&gt;RegisterHttpRoutes.cs&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb8wff7jv2hks9zixs6i8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb8wff7jv2hks9zixs6i8.png" width="696" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  "Multiple types were found that match the controller named 'MinimumTestApi'
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Error Details.
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;`&lt;br&gt;
{"Message": "An error has occurred.", "ExceptionMessage": "Multiple types were found that match the controller named 'MinimumTestApi'. This can happen if the route that services this request ('api/minimumtest3/stats') found multiple controllers defined with the same name but differing namespaces, which is not supported. \r\n\r\nThe request for 'MinimumTestApi' has found the following matching Controllers:\r\nMinimumTest.Controllers.MinimumTestApiController\r\nMinimumTest.Controllers.MinimumTestApiController", "ExceptionType": "System.InvalidOperationException", "StackTrace":""   at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.SelectController(HttpRequestMessage request)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.&amp;lt;SendAsync&amp;gt;d__15.MoveNext()"}&lt;br&gt;
`&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ja82wm2kcjibz5pi49m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ja82wm2kcjibz5pi49m.png" width="800" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution.
&lt;/h3&gt;

&lt;p&gt;Name resolution is not working because there is a duplicate controller class name with another module. Change the controller class name to something else.&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>aspnet</category>
    </item>
  </channel>
</rss>
