X\choro 11 ヶ月 前
コミット
5704d41e17
100 ファイル変更2732 行追加0 行削除
  1. 30 0
      .dockerignore
  2. BIN
      .vs/ProjectEvaluation/goods.metadata.v9.bin
  3. BIN
      .vs/ProjectEvaluation/goods.projects.v9.bin
  4. BIN
      .vs/ProjectEvaluation/goods.strings.v9.bin
  5. BIN
      .vs/goods/CopilotIndices/17.12.38.29086/CodeChunks.db
  6. BIN
      .vs/goods/CopilotIndices/17.12.38.29086/SemanticSymbols.db
  7. BIN
      .vs/goods/CopilotIndices/17.12.38.29086/SemanticSymbols.db-shm
  8. BIN
      .vs/goods/CopilotIndices/17.12.38.29086/SemanticSymbols.db-wal
  9. BIN
      .vs/goods/DesignTimeBuild/.dtbcache.v2
  10. BIN
      .vs/goods/FileContentIndex/03a9cc85-82cb-4035-a1c5-d4fd24904267.vsidx
  11. BIN
      .vs/goods/FileContentIndex/2292b245-81ba-44e9-bda9-8cbecf36345b.vsidx
  12. BIN
      .vs/goods/FileContentIndex/4f9d1ae0-4bc6-468f-bf0c-1f192c711d62.vsidx
  13. BIN
      .vs/goods/FileContentIndex/5bb1aab0-2c44-43f5-bfd0-1629d602c371.vsidx
  14. BIN
      .vs/goods/FileContentIndex/69a84769-4459-4327-8f39-f3aadb15d365.vsidx
  15. BIN
      .vs/goods/FileContentIndex/83877793-c006-4ac2-bc94-563ed1bafd24.vsidx
  16. BIN
      .vs/goods/FileContentIndex/857a111c-f7e6-4c1d-9d03-2e9a843b9ac2.vsidx
  17. BIN
      .vs/goods/FileContentIndex/af4dd9ce-e7e9-4943-9fc5-70b6b3a55817.vsidx
  18. BIN
      .vs/goods/FileContentIndex/b566dc39-c4ab-4fec-99fc-c2a9a43589d6.vsidx
  19. BIN
      .vs/goods/FileContentIndex/c387acb1-1716-4928-b3ce-e38dd22aa18d.vsidx
  20. BIN
      .vs/goods/FileContentIndex/ccc345cc-ab6f-4bf7-896e-b21dce8dbb46.vsidx
  21. BIN
      .vs/goods/FileContentIndex/f5d6e4f8-83c9-454e-9d2b-b3cfb1a4a165.vsidx
  22. 1016 0
      .vs/goods/config/applicationhost.config
  23. BIN
      .vs/goods/copilot-chat/d1c88368/sessions/5819918a-2622-411d-a933-e0c8f9331b37
  24. BIN
      .vs/goods/copilot-chat/d1c88368/sessions/6029840c-b55e-47f2-88a6-aa2db67aa4dc
  25. BIN
      .vs/goods/copilot-chat/d1c88368/sessions/65642e56-dae0-45d3-8aa7-3fe8f6bc3fe8
  26. BIN
      .vs/goods/v17/.futdcache.v2
  27. BIN
      .vs/goods/v17/.suo
  28. 45 0
      .vs/goods/v17/DocumentLayout.backup.json
  29. 45 0
      .vs/goods/v17/DocumentLayout.json
  30. 155 0
      Controllers/HomeController.cs
  31. 30 0
      Dockerfile
  32. 17 0
      Models/Clients.cs
  33. 239 0
      Models/CoupangModel.cs
  34. 26 0
      Models/DBContext.cs
  35. 9 0
      Models/ErrorViewModel.cs
  36. 139 0
      Models/Request.cs
  37. 49 0
      Models/Response/Product.cs
  38. 55 0
      Models/Response/Search.cs
  39. 26 0
      Models/SearchKeyword.cs
  40. 37 0
      Program.cs
  41. 49 0
      Properties/launchSettings.json
  42. 33 0
      Views/Home/Category.cshtml
  43. 19 0
      Views/Home/Event.cshtml
  44. 33 0
      Views/Home/GoldBox.cshtml
  45. 60 0
      Views/Home/Index.cshtml
  46. 33 0
      Views/Home/Pl.cshtml
  47. 31 0
      Views/Home/Search.cshtml
  48. 307 0
      Views/SCSS/site.scss
  49. 4 0
      Views/SCSS/tailwind.scss
  50. 25 0
      Views/Shared/Error.cshtml
  51. 124 0
      Views/Shared/_Layout.cshtml
  52. 48 0
      Views/Shared/_Layout.cshtml.css
  53. 2 0
      Views/Shared/_ValidationScriptsPartial.cshtml
  54. 3 0
      Views/_ViewImports.cshtml
  55. 3 0
      Views/_ViewStart.cshtml
  56. 8 0
      appsettings.Development.json
  57. 12 0
      appsettings.json
  58. BIN
      bin/Debug/net8.0/Azure.Core.dll
  59. BIN
      bin/Debug/net8.0/Azure.Identity.dll
  60. BIN
      bin/Debug/net8.0/Microsoft.Bcl.AsyncInterfaces.dll
  61. BIN
      bin/Debug/net8.0/Microsoft.Data.SqlClient.dll
  62. BIN
      bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll
  63. BIN
      bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Relational.dll
  64. BIN
      bin/Debug/net8.0/Microsoft.EntityFrameworkCore.SqlServer.dll
  65. BIN
      bin/Debug/net8.0/Microsoft.EntityFrameworkCore.dll
  66. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Caching.Abstractions.dll
  67. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Caching.Memory.dll
  68. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll
  69. BIN
      bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  70. BIN
      bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll
  71. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll
  72. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Logging.dll
  73. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Options.dll
  74. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Primitives.dll
  75. BIN
      bin/Debug/net8.0/Microsoft.Identity.Client.Extensions.Msal.dll
  76. BIN
      bin/Debug/net8.0/Microsoft.Identity.Client.dll
  77. BIN
      bin/Debug/net8.0/Microsoft.IdentityModel.Abstractions.dll
  78. BIN
      bin/Debug/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll
  79. BIN
      bin/Debug/net8.0/Microsoft.IdentityModel.Logging.dll
  80. BIN
      bin/Debug/net8.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
  81. BIN
      bin/Debug/net8.0/Microsoft.IdentityModel.Protocols.dll
  82. BIN
      bin/Debug/net8.0/Microsoft.IdentityModel.Tokens.dll
  83. BIN
      bin/Debug/net8.0/Microsoft.SqlServer.Server.dll
  84. BIN
      bin/Debug/net8.0/Microsoft.Win32.SystemEvents.dll
  85. BIN
      bin/Debug/net8.0/System.ClientModel.dll
  86. BIN
      bin/Debug/net8.0/System.Configuration.ConfigurationManager.dll
  87. BIN
      bin/Debug/net8.0/System.Diagnostics.DiagnosticSource.dll
  88. BIN
      bin/Debug/net8.0/System.Drawing.Common.dll
  89. BIN
      bin/Debug/net8.0/System.Formats.Asn1.dll
  90. BIN
      bin/Debug/net8.0/System.IO.Pipelines.dll
  91. BIN
      bin/Debug/net8.0/System.IdentityModel.Tokens.Jwt.dll
  92. BIN
      bin/Debug/net8.0/System.Memory.Data.dll
  93. BIN
      bin/Debug/net8.0/System.Runtime.Caching.dll
  94. BIN
      bin/Debug/net8.0/System.Security.Cryptography.ProtectedData.dll
  95. BIN
      bin/Debug/net8.0/System.Security.Permissions.dll
  96. BIN
      bin/Debug/net8.0/System.Text.Encodings.Web.dll
  97. BIN
      bin/Debug/net8.0/System.Text.Json.dll
  98. BIN
      bin/Debug/net8.0/System.Windows.Extensions.dll
  99. 8 0
      bin/Debug/net8.0/appsettings.Development.json
  100. 12 0
      bin/Debug/net8.0/appsettings.json

+ 30 - 0
.dockerignore

@@ -0,0 +1,30 @@
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md
+!**/.gitignore
+!.git/HEAD
+!.git/config
+!.git/packed-refs
+!.git/refs/heads/**

BIN
.vs/ProjectEvaluation/goods.metadata.v9.bin


BIN
.vs/ProjectEvaluation/goods.projects.v9.bin


BIN
.vs/ProjectEvaluation/goods.strings.v9.bin


BIN
.vs/goods/CopilotIndices/17.12.38.29086/CodeChunks.db


BIN
.vs/goods/CopilotIndices/17.12.38.29086/SemanticSymbols.db


BIN
.vs/goods/CopilotIndices/17.12.38.29086/SemanticSymbols.db-shm


BIN
.vs/goods/CopilotIndices/17.12.38.29086/SemanticSymbols.db-wal


BIN
.vs/goods/DesignTimeBuild/.dtbcache.v2


BIN
.vs/goods/FileContentIndex/03a9cc85-82cb-4035-a1c5-d4fd24904267.vsidx


BIN
.vs/goods/FileContentIndex/2292b245-81ba-44e9-bda9-8cbecf36345b.vsidx


BIN
.vs/goods/FileContentIndex/4f9d1ae0-4bc6-468f-bf0c-1f192c711d62.vsidx


BIN
.vs/goods/FileContentIndex/5bb1aab0-2c44-43f5-bfd0-1629d602c371.vsidx


BIN
.vs/goods/FileContentIndex/69a84769-4459-4327-8f39-f3aadb15d365.vsidx


BIN
.vs/goods/FileContentIndex/83877793-c006-4ac2-bc94-563ed1bafd24.vsidx


BIN
.vs/goods/FileContentIndex/857a111c-f7e6-4c1d-9d03-2e9a843b9ac2.vsidx


BIN
.vs/goods/FileContentIndex/af4dd9ce-e7e9-4943-9fc5-70b6b3a55817.vsidx


BIN
.vs/goods/FileContentIndex/b566dc39-c4ab-4fec-99fc-c2a9a43589d6.vsidx


BIN
.vs/goods/FileContentIndex/c387acb1-1716-4928-b3ce-e38dd22aa18d.vsidx


BIN
.vs/goods/FileContentIndex/ccc345cc-ab6f-4bf7-896e-b21dce8dbb46.vsidx


BIN
.vs/goods/FileContentIndex/f5d6e4f8-83c9-454e-9d2b-b3cfb1a4a165.vsidx


+ 1016 - 0
.vs/goods/config/applicationhost.config

@@ -0,0 +1,1016 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    IIS configuration sections.
+
+    For schema documentation, see
+    %IIS_BIN%\config\schema\IIS_schema.xml.
+    
+    Please make a backup of this file before making any changes to it.
+
+    NOTE: The following environment variables are available to be used
+          within this file and are understood by the IIS Express.
+
+          %IIS_USER_HOME% - The IIS Express home directory for the user
+          %IIS_SITES_HOME% - The default home directory for sites
+          %IIS_BIN% - The location of the IIS Express binaries
+          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%
+
+-->
+<configuration>
+
+    <!--
+
+        The <configSections> section controls the registration of sections.
+        Section is the basic unit of deployment, locking, searching and
+        containment for configuration settings.
+        
+        Every section belongs to one section group.
+        A section group is a container of logically-related sections.
+        
+        Sections cannot be nested.
+        Section groups may be nested.
+        
+        <section
+            name=""  [Required, Collection Key] [XML name of the section]
+            allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
+            overrideModeDefault="Allow"  [Allow|Deny] [Default delegation mode]
+            allowLocation="true"  [true|false] [Allowed in location tags]
+        />
+        
+        The recommended way to unlock sections is by using a location tag:
+        <location path="Default Web Site" overrideMode="Allow">
+            <system.webServer>
+                <asp />
+            </system.webServer>
+        </location>
+
+    -->
+    <configSections>
+        <sectionGroup name="system.applicationHost">
+            <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+        </sectionGroup>
+
+        <sectionGroup name="system.webServer">
+            <section name="asp" overrideModeDefault="Deny" />
+            <section name="caching" overrideModeDefault="Allow" />
+            <section name="cgi" overrideModeDefault="Deny" />
+            <section name="defaultDocument" overrideModeDefault="Allow" />
+            <section name="directoryBrowse" overrideModeDefault="Allow" />
+            <section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="handlers" overrideModeDefault="Deny" />
+            <section name="httpCompression" overrideModeDefault="Allow" allowDefinition="Everywhere" />
+            <section name="httpErrors" overrideModeDefault="Allow" />
+            <section name="httpLogging" overrideModeDefault="Deny" />
+            <section name="httpProtocol" overrideModeDefault="Allow" />
+            <section name="httpRedirect" overrideModeDefault="Allow" />
+            <section name="httpTracing" overrideModeDefault="Deny" />
+            <section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
+            <section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
+            <section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
+            <section name="odbcLogging" overrideModeDefault="Deny" />
+            <sectionGroup name="security">
+                <section name="access" overrideModeDefault="Deny" />
+                <section name="applicationDependencies" overrideModeDefault="Deny" />
+                <sectionGroup name="authentication">
+                    <section name="anonymousAuthentication" overrideModeDefault="Deny" />
+                    <section name="basicAuthentication" overrideModeDefault="Deny" />
+                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
+                    <section name="digestAuthentication" overrideModeDefault="Deny" />
+                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
+                    <section name="windowsAuthentication" overrideModeDefault="Deny" />
+                </sectionGroup>
+                <section name="authorization" overrideModeDefault="Allow" />
+                <section name="ipSecurity" overrideModeDefault="Deny" />
+                <section name="dynamicIpSecurity" overrideModeDefault="Deny" />
+                <section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+                <section name="requestFiltering" overrideModeDefault="Allow" />
+            </sectionGroup>
+            <section name="serverRuntime" overrideModeDefault="Deny" />
+            <section name="serverSideInclude" overrideModeDefault="Deny" />
+            <section name="staticContent" overrideModeDefault="Allow" />
+            <sectionGroup name="tracing">
+                <section name="traceFailedRequests" overrideModeDefault="Allow" />
+                <section name="traceProviderDefinitions" overrideModeDefault="Deny" />
+            </sectionGroup>
+            <section name="urlCompression" overrideModeDefault="Allow" />
+            <section name="validation" overrideModeDefault="Allow" />
+            <sectionGroup name="webdav">
+                <section name="globalSettings" overrideModeDefault="Deny" />
+                <section name="authoring" overrideModeDefault="Deny" />
+                <section name="authoringRules" overrideModeDefault="Deny" />
+            </sectionGroup>
+            <sectionGroup name="rewrite">
+                <section name="allowedServerVariables" overrideModeDefault="Deny" />
+                <section name="rules" overrideModeDefault="Allow" />
+                <section name="outboundRules" overrideModeDefault="Allow" />
+                <section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
+                <section name="providers" overrideModeDefault="Allow" />
+                <section name="rewriteMaps" overrideModeDefault="Allow" />
+            </sectionGroup>
+            <section name="webSocket" overrideModeDefault="Deny" />
+        <section name="aspNetCore" overrideModeDefault="Allow" /></sectionGroup>
+    </configSections>
+
+    <configProtectedData>
+        <providers>
+            <add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
+            <add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA/HKxkz6alrlAPez0IUgujj/6k3WxCDriHp6jvpv3yEZmo7h6SMzGLxo4mTrIQVHSkB7tmElHKfUFTzE2BWF7nFWHY6Z6qmGBauFzwJMwESjril7Gjz69RBFH259HQ6aRDq9Xfx7U7H4HtdmnKNqGjgl/hwPQBGeIlWiDh+sYv3vKB0QU971tjX6H2B+9armlnC8UOuA6JYMDMI/VLLL16sng0fWAy5JYe0YVABVjiAWDW264RZW9Tr1Oax4qHZKg+SdjULxeOc2YmpX+d0yeITo1HkPF1hN1gHpIPIUDo05ilHUNfR3OkjVCIQK4cFKCq1s8NH+y+13MxUC4Fn1AlQ==" />
+            <add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAALmU8lTC+v2qtfQiiiquvvLpUQqKLEXs+jSKoWCM/uPhyB++k4dwug19mGidNK5FYiWK2KYE1yhjVJcbp12E98Q0R2nT7eBiCMY2JairxQ591rqABK7keGaIjwH7PwGzSpILl3RJ4YFvJ/7ZXEJxeDZIjW8ZxWVXx+/VyHs9U3WguLEkgMUX3jrxJi8LouxaIVPJAv/YQ1ZCWs8zImitxX/C/7o7yaIxznfsN5nGQzQfpUDPeby99aw2zPVTtZI2LaWIBON8guABvZ6JtJVDWmfdK6sodbnwdZkr6/Z2rfvamT1dC1SpQrGG7ulR/f9/GXvCaW10ZVKxekBF/CYlNMg==" />
+        </providers>
+    </configProtectedData>
+
+    <system.applicationHost>
+
+        <applicationPools>
+            <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
+            <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
+            <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
+            <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
+            <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
+            <applicationPoolDefaults managedRuntimeVersion="v4.0">
+                <processModel loadUserProfile="true" setProfileEnvironment="false" />
+            </applicationPoolDefaults>
+        </applicationPools>
+
+        <!--
+
+          The <listenerAdapters> section defines the protocols with which the
+          Windows Process Activation Service (WAS) binds.
+
+        -->
+        <listenerAdapters>
+            <add name="http" />
+        </listenerAdapters>
+
+        <sites>
+            <site name="WebSite1" id="1" serverAutoStart="true">
+                <application path="/">
+                    <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
+                </application>
+                <bindings>
+                    <binding protocol="http" bindingInformation=":8080:localhost" />
+                </bindings>
+            </site>
+            <siteDefaults>
+                <!-- To enable logging, please change the below attribute "enabled" to "true" -->
+                <logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false" />
+                <traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" />
+            </siteDefaults>
+            <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
+            <virtualDirectoryDefaults allowSubDirConfig="true" />
+        </sites>
+
+        <webLimits />
+
+    </system.applicationHost>
+
+    <system.webServer>
+
+        <serverRuntime />
+
+        <asp scriptErrorSentToBrowser="true">
+            <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
+            <limits />
+        </asp>
+
+        <caching enabled="true" enableKernelCache="true">
+        </caching>
+
+        <cgi />
+
+        <defaultDocument enabled="true">
+            <files>
+                <add value="Default.htm" />
+                <add value="Default.asp" />
+                <add value="index.htm" />
+                <add value="index.html" />
+                <add value="iisstart.htm" />
+                <add value="default.aspx" />
+            </files>
+        </defaultDocument>
+
+        <directoryBrowse enabled="false" />
+
+        <fastCgi />
+
+        <!--
+
+          The <globalModules> section defines all native-code modules.
+          To enable a module, specify it in the <modules> section.
+
+        -->
+        <globalModules>
+            <add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
+            <add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
+            <add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
+            <add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
+            <add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
+            <add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
+            <add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
+            <add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
+            <add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
+            <add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
+            <add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
+            <add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
+            <add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
+            <add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
+            <add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
+            <add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
+            <add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
+            <add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
+            <add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
+            <add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
+            <add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
+            <add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
+            <add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
+            <add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
+            <add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
+            <add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
+            <add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
+            <add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
+<!--            <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
+            <add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
+            <add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
+            <add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
+            <add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
+            <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
+            <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
+            <add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
+            <add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
+            <add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
+            <add name="AspNetCoreModule" image="%IIS_BIN%\aspnetcore.dll" />
+            <add name="AspNetCoreModuleV2" image="%IIS_BIN%\Asp.Net Core Module\V2\aspnetcorev2.dll" />
+        </globalModules>
+
+        <httpCompression directory="%TEMP%">
+            <scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
+            <dynamicTypes>
+                <add mimeType="text/*" enabled="true" />
+                <add mimeType="message/*" enabled="true" />
+                <add mimeType="application/x-javascript" enabled="true" />
+                <add mimeType="application/javascript" enabled="true" />
+                <add mimeType="*/*" enabled="false" />
+                <add mimeType="text/event-stream" enabled="false" />
+            </dynamicTypes>
+            <staticTypes>
+                <add mimeType="text/*" enabled="true" />
+                <add mimeType="message/*" enabled="true" />
+                <add mimeType="application/javascript" enabled="true" />
+                <add mimeType="application/atom+xml" enabled="true" />
+                <add mimeType="application/xaml+xml" enabled="true" />
+                <add mimeType="image/svg+xml" enabled="true" />
+                <add mimeType="*/*" enabled="false" />
+            </staticTypes>
+        </httpCompression>
+
+        <httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
+            <error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
+            <error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
+            <error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
+            <error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
+            <error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
+            <error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
+            <error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
+            <error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
+            <error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
+        </httpErrors>
+
+        <httpLogging dontLog="false" />
+
+        <httpProtocol>
+            <customHeaders>
+                <clear />
+                <add name="X-Powered-By" value="ASP.NET" />
+            </customHeaders>
+            <redirectHeaders>
+                <clear />
+            </redirectHeaders>
+        </httpProtocol>
+
+        <httpRedirect enabled="false" />
+
+        <httpTracing />
+
+        <isapiFilters>
+            <filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
+            <filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
+            <filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
+            <filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
+            <filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
+        </isapiFilters>
+
+        <odbcLogging />
+
+        <security>
+
+            <access sslFlags="None" />
+
+            <applicationDependencies>
+                <application name="Active Server Pages" groupId="ASP" />
+            </applicationDependencies>
+
+            <authentication>
+
+                <anonymousAuthentication enabled="true" userName="" />
+
+                <basicAuthentication enabled="false" />
+
+                <clientCertificateMappingAuthentication enabled="false" />
+
+                <digestAuthentication enabled="false" />
+
+                <iisClientCertificateMappingAuthentication enabled="false">
+                </iisClientCertificateMappingAuthentication>
+
+                <windowsAuthentication enabled="false">
+                    <providers>
+                        <add value="Negotiate" />
+                        <add value="NTLM" />
+                    </providers>
+                </windowsAuthentication>
+
+            </authentication>
+
+            <authorization>
+                <add accessType="Allow" users="*" />
+            </authorization>
+
+            <ipSecurity allowUnlisted="true" />
+
+            <isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
+                <add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
+                <add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
+                <add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
+                <add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
+            </isapiCgiRestriction>
+
+            <requestFiltering>
+                <fileExtensions allowUnlisted="true" applyToWebDAV="true">
+                    <add fileExtension=".asa" allowed="false" />
+                    <add fileExtension=".asax" allowed="false" />
+                    <add fileExtension=".ascx" allowed="false" />
+                    <add fileExtension=".master" allowed="false" />
+                    <add fileExtension=".skin" allowed="false" />
+                    <add fileExtension=".browser" allowed="false" />
+                    <add fileExtension=".sitemap" allowed="false" />
+                    <add fileExtension=".config" allowed="false" />
+                    <add fileExtension=".cs" allowed="false" />
+                    <add fileExtension=".csproj" allowed="false" />
+                    <add fileExtension=".vb" allowed="false" />
+                    <add fileExtension=".vbproj" allowed="false" />
+                    <add fileExtension=".webinfo" allowed="false" />
+                    <add fileExtension=".licx" allowed="false" />
+                    <add fileExtension=".resx" allowed="false" />
+                    <add fileExtension=".resources" allowed="false" />
+                    <add fileExtension=".mdb" allowed="false" />
+                    <add fileExtension=".vjsproj" allowed="false" />
+                    <add fileExtension=".java" allowed="false" />
+                    <add fileExtension=".jsl" allowed="false" />
+                    <add fileExtension=".ldb" allowed="false" />
+                    <add fileExtension=".dsdgm" allowed="false" />
+                    <add fileExtension=".ssdgm" allowed="false" />
+                    <add fileExtension=".lsad" allowed="false" />
+                    <add fileExtension=".ssmap" allowed="false" />
+                    <add fileExtension=".cd" allowed="false" />
+                    <add fileExtension=".dsprototype" allowed="false" />
+                    <add fileExtension=".lsaprototype" allowed="false" />
+                    <add fileExtension=".sdm" allowed="false" />
+                    <add fileExtension=".sdmDocument" allowed="false" />
+                    <add fileExtension=".mdf" allowed="false" />
+                    <add fileExtension=".ldf" allowed="false" />
+                    <add fileExtension=".ad" allowed="false" />
+                    <add fileExtension=".dd" allowed="false" />
+                    <add fileExtension=".ldd" allowed="false" />
+                    <add fileExtension=".sd" allowed="false" />
+                    <add fileExtension=".adprototype" allowed="false" />
+                    <add fileExtension=".lddprototype" allowed="false" />
+                    <add fileExtension=".exclude" allowed="false" />
+                    <add fileExtension=".refresh" allowed="false" />
+                    <add fileExtension=".compiled" allowed="false" />
+                    <add fileExtension=".msgx" allowed="false" />
+                    <add fileExtension=".vsdisco" allowed="false" />
+                    <add fileExtension=".rules" allowed="false" />
+                </fileExtensions>
+                <verbs allowUnlisted="true" applyToWebDAV="true" />
+                <hiddenSegments applyToWebDAV="true">
+                    <add segment="web.config" />
+                    <add segment="bin" />
+                    <add segment="App_code" />
+                    <add segment="App_GlobalResources" />
+                    <add segment="App_LocalResources" />
+                    <add segment="App_WebReferences" />
+                    <add segment="App_Data" />
+                    <add segment="App_Browsers" />
+                </hiddenSegments>
+            </requestFiltering>
+
+        </security>
+
+        <serverSideInclude ssiExecDisable="false" />
+
+        <staticContent lockAttributes="isDocFooterFileName">
+            <mimeMap fileExtension=".323" mimeType="text/h323" />
+            <mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
+            <mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
+            <mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
+            <mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
+            <mimeMap fileExtension=".aac" mimeType="audio/aac" />
+            <mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
+            <mimeMap fileExtension=".accde" mimeType="application/msaccess" />
+            <mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
+            <mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
+            <mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
+            <mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
+            <mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ai" mimeType="application/postscript" />
+            <mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
+            <mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
+            <mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
+            <mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
+            <mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
+            <mimeMap fileExtension=".art" mimeType="image/x-jg" />
+            <mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
+            <mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".asm" mimeType="text/plain" />
+            <mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
+            <mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
+            <mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
+            <mimeMap fileExtension=".au" mimeType="audio/basic" />
+            <mimeMap fileExtension=".avi" mimeType="video/avi" />
+            <mimeMap fileExtension=".axs" mimeType="application/olescript" />
+            <mimeMap fileExtension=".bas" mimeType="text/plain" />
+            <mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
+            <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".bmp" mimeType="image/bmp" />
+            <mimeMap fileExtension=".c" mimeType="text/plain" />
+            <mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
+            <mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
+            <mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
+            <mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
+            <mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
+            <mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
+            <mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
+            <mimeMap fileExtension=".cnf" mimeType="text/plain" />
+            <mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
+            <mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
+            <mimeMap fileExtension=".cpp" mimeType="text/plain" />
+            <mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
+            <mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
+            <mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
+            <mimeMap fileExtension=".csh" mimeType="application/x-csh" />
+            <mimeMap fileExtension=".css" mimeType="text/css" />
+            <mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".dcr" mimeType="application/x-director" />
+            <mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
+            <mimeMap fileExtension=".dib" mimeType="image/bmp" />
+            <mimeMap fileExtension=".dir" mimeType="application/x-director" />
+            <mimeMap fileExtension=".disco" mimeType="text/xml" />
+            <mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
+            <mimeMap fileExtension=".dll.config" mimeType="text/xml" />
+            <mimeMap fileExtension=".dlm" mimeType="text/dlm" />
+            <mimeMap fileExtension=".doc" mimeType="application/msword" />
+            <mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
+            <mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
+            <mimeMap fileExtension=".dot" mimeType="application/msword" />
+            <mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
+            <mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
+            <mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".dtd" mimeType="text/xml" />
+            <mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
+            <mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
+            <mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
+            <mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".dxr" mimeType="application/x-director" />
+            <mimeMap fileExtension=".eml" mimeType="message/rfc822" />
+            <mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
+            <mimeMap fileExtension=".eps" mimeType="application/postscript" />
+            <mimeMap fileExtension=".esd" mimeType="application/vnd.ms-cab-compressed" />
+            <mimeMap fileExtension=".etx" mimeType="text/x-setext" />
+            <mimeMap fileExtension=".evy" mimeType="application/envoy" />
+            <mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".exe.config" mimeType="text/xml" />
+            <mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
+            <mimeMap fileExtension=".fif" mimeType="application/fractals" />
+            <mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".flv" mimeType="video/x-flv" />
+            <mimeMap fileExtension=".gif" mimeType="image/gif" />
+            <mimeMap fileExtension=".glb" mimeType="model/gltf-binary" />
+            <mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
+            <mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
+            <mimeMap fileExtension=".h" mimeType="text/plain" />
+            <mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
+            <mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
+            <mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
+            <mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
+            <mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
+            <mimeMap fileExtension=".hta" mimeType="application/hta" />
+            <mimeMap fileExtension=".htc" mimeType="text/x-component" />
+            <mimeMap fileExtension=".htm" mimeType="text/html" />
+            <mimeMap fileExtension=".html" mimeType="text/html" />
+            <mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
+            <mimeMap fileExtension=".hxt" mimeType="text/html" />
+            <mimeMap fileExtension=".ico" mimeType="image/x-icon" />
+            <mimeMap fileExtension=".ics" mimeType="text/calendar" />
+            <mimeMap fileExtension=".ief" mimeType="image/ief" />
+            <mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
+            <mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
+            <mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
+            <mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
+            <mimeMap fileExtension=".jar" mimeType="application/java-archive" />
+            <mimeMap fileExtension=".java" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
+            <mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
+            <mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
+            <mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
+            <mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
+            <mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
+            <mimeMap fileExtension=".js" mimeType="application/javascript" />
+            <mimeMap fileExtension=".json" mimeType="application/json" />
+            <mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
+            <mimeMap fileExtension=".jsx" mimeType="text/jscript" />
+            <mimeMap fileExtension=".latex" mimeType="application/x-latex" />
+            <mimeMap fileExtension=".less" mimeType="text/css" />
+            <mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
+            <mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
+            <mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
+            <mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
+            <mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
+            <mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
+            <mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
+            <mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
+            <mimeMap fileExtension=".m4v" mimeType="video/mp4" />
+            <mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
+            <mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
+            <mimeMap fileExtension=".map" mimeType="text/plain" />
+            <mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
+            <mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
+            <mimeMap fileExtension=".mht" mimeType="message/rfc822" />
+            <mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
+            <mimeMap fileExtension=".mid" mimeType="audio/mid" />
+            <mimeMap fileExtension=".midi" mimeType="audio/mid" />
+            <mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
+            <mimeMap fileExtension=".mno" mimeType="text/xml" />
+            <mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
+            <mimeMap fileExtension=".mov" mimeType="video/quicktime" />
+            <mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
+            <mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
+            <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
+            <mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
+            <mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
+            <mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
+            <mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
+            <mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
+            <mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
+            <mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
+            <mimeMap fileExtension=".nws" mimeType="message/rfc822" />
+            <mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".oda" mimeType="application/oda" />
+            <mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
+            <mimeMap fileExtension=".ods" mimeType="application/oleobject" />
+            <mimeMap fileExtension=".oga" mimeType="audio/ogg" />
+            <mimeMap fileExtension=".ogg" mimeType="video/ogg" />
+            <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
+            <mimeMap fileExtension=".one" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onea" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
+            <mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
+            <mimeMap fileExtension=".otf" mimeType="font/otf" />
+            <mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
+            <mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
+            <mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
+            <mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
+            <mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
+            <mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
+            <mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
+            <mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
+            <mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pdf" mimeType="application/pdf" />
+            <mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
+            <mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
+            <mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
+            <mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".png" mimeType="image/png" />
+            <mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
+            <mimeMap fileExtension=".pnz" mimeType="image/png" />
+            <mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
+            <mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
+            <mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
+            <mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
+            <mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
+            <mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
+            <mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
+            <mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
+            <mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
+            <mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
+            <mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
+            <mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
+            <mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ps" mimeType="application/postscript" />
+            <mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
+            <mimeMap fileExtension=".qt" mimeType="video/quicktime" />
+            <mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
+            <mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
+            <mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
+            <mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
+            <mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
+            <mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
+            <mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
+            <mimeMap fileExtension=".rmi" mimeType="audio/mid" />
+            <mimeMap fileExtension=".roff" mimeType="application/x-troff" />
+            <mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
+            <mimeMap fileExtension=".rtf" mimeType="application/rtf" />
+            <mimeMap fileExtension=".rtx" mimeType="text/richtext" />
+            <mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
+            <mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
+            <mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
+            <mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
+            <mimeMap fileExtension=".sgml" mimeType="text/sgml" />
+            <mimeMap fileExtension=".sh" mimeType="application/x-sh" />
+            <mimeMap fileExtension=".shar" mimeType="application/x-shar" />
+            <mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
+            <mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
+            <mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
+            <mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
+            <mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
+            <mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
+            <mimeMap fileExtension=".snd" mimeType="audio/basic" />
+            <mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
+            <mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
+            <mimeMap fileExtension=".spx" mimeType="audio/ogg" />
+            <mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
+            <mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
+            <mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
+            <mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
+            <mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
+            <mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
+            <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
+            <mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
+            <mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
+            <mimeMap fileExtension=".t" mimeType="application/x-troff" />
+            <mimeMap fileExtension=".tar" mimeType="application/x-tar" />
+            <mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
+            <mimeMap fileExtension=".tex" mimeType="application/x-tex" />
+            <mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
+            <mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
+            <mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
+            <mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
+            <mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".tif" mimeType="image/tiff" />
+            <mimeMap fileExtension=".tiff" mimeType="image/tiff" />
+            <mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".tr" mimeType="application/x-troff" />
+            <mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
+            <mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
+            <mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
+            <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
+            <mimeMap fileExtension=".txt" mimeType="text/plain" />
+            <mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".uls" mimeType="text/iuls" />
+            <mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
+            <mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
+            <mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
+            <mimeMap fileExtension=".vcs" mimeType="text/plain" />
+            <mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
+            <mimeMap fileExtension=".vml" mimeType="text/xml" />
+            <mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
+            <mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".wasm" mimeType="application/wasm" />
+            <mimeMap fileExtension=".wav" mimeType="audio/wav" />
+            <mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
+            <mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
+            <mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
+            <mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
+            <mimeMap fileExtension=".webm" mimeType="video/webm" />
+            <mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
+            <mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
+            <mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
+            <mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
+            <mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
+            <mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
+            <mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
+            <mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
+            <mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
+            <mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
+            <mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
+            <mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
+            <mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
+            <mimeMap fileExtension=".woff" mimeType="font/x-woff" />
+            <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
+            <mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
+            <mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
+            <mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".wsdl" mimeType="text/xml" />
+            <mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
+            <mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
+            <mimeMap fileExtension=".x" mimeType="application/directx" />
+            <mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
+            <mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
+            <mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
+            <mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
+            <mimeMap fileExtension=".xdr" mimeType="text/plain" />
+            <mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
+            <mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
+            <mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
+            <mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
+            <mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
+            <mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
+            <mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
+            <mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
+            <mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xml" mimeType="text/xml" />
+            <mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
+            <mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
+            <mimeMap fileExtension=".xsd" mimeType="text/xml" />
+            <mimeMap fileExtension=".xsf" mimeType="text/xml" />
+            <mimeMap fileExtension=".xsl" mimeType="text/xml" />
+            <mimeMap fileExtension=".xslt" mimeType="text/xml" />
+            <mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
+            <mimeMap fileExtension=".z" mimeType="application/x-compress" />
+            <mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
+        </staticContent>
+
+        <tracing>
+
+            <traceFailedRequests>
+                <add path="*">
+                    <traceAreas>
+                        <add provider="ASP" verbosity="Verbose" />
+                        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
+                        <add provider="ISAPI Extension" verbosity="Verbose" />
+                        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
+                    </traceAreas>
+                    <failureDefinitions statusCodes="200-999" />
+                </add>
+            </traceFailedRequests>
+
+             <traceProviderDefinitions>
+                <add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
+                    <areas>
+                        <clear />
+                        <add name="Authentication" value="2" />
+                        <add name="Security" value="4" />
+                        <add name="Filter" value="8" />
+                        <add name="StaticFile" value="16" />
+                        <add name="CGI" value="32" />
+                        <add name="Compression" value="64" />
+                        <add name="Cache" value="128" />
+                        <add name="RequestNotifications" value="256" />
+                        <add name="Module" value="512" />
+                        <add name="Rewrite" value="1024" />
+                        <add name="FastCGI" value="4096" />
+                        <add name="WebSocket" value="16384" />
+                        <add name="ANCM" value="65536" />
+                    </areas>
+                </add>
+                <add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
+                    <areas>
+                        <clear />
+                    </areas>
+                </add>
+                <add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
+                    <areas>
+                        <clear />
+                    </areas>
+                </add>
+                <add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
+                    <areas>
+                        <add name="Infrastructure" value="1" />
+                        <add name="Module" value="2" />
+                        <add name="Page" value="4" />
+                        <add name="AppServices" value="8" />
+                    </areas>
+                </add>
+            </traceProviderDefinitions>
+
+        </tracing>
+
+        <urlCompression />
+
+        <validation />
+        <webdav>
+            <globalSettings>
+                <propertyStores>
+                    <add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
+                </propertyStores>
+                <lockStores>
+                    <add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
+                </lockStores>
+
+            </globalSettings>
+            <authoring>
+                <locks enabled="true" lockStore="webdav_simple_lock" />
+            </authoring>
+            <authoringRules />
+        </webdav>
+        <webSocket />
+        <applicationInitialization />
+
+    </system.webServer>
+    <location path="" overrideMode="Allow">
+        <system.webServer>
+            <modules>
+                <add name="IsapiFilterModule" lockItem="true" />
+                <add name="BasicAuthenticationModule" lockItem="true" />
+                <add name="IsapiModule" lockItem="true" />
+                <add name="HttpLoggingModule" lockItem="true" />
+                <add name="DynamicCompressionModule" lockItem="true" />
+                <add name="StaticCompressionModule" lockItem="true" />
+                <add name="DefaultDocumentModule" lockItem="true" />
+                <add name="DirectoryListingModule" lockItem="true" />
+                <add name="ProtocolSupportModule" lockItem="true" />
+                <add name="HttpRedirectionModule" lockItem="true" />
+                <add name="ServerSideIncludeModule" lockItem="true" />
+                <add name="StaticFileModule" lockItem="true" />
+                <add name="AnonymousAuthenticationModule" lockItem="true" />
+                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
+                <add name="UrlAuthorizationModule" lockItem="true" />
+                <add name="WindowsAuthenticationModule" lockItem="true" />
+                <add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
+                <add name="WebMatrixSupportModule" lockItem="true" />
+                <add name="IpRestrictionModule" lockItem="true" />
+                <add name="DynamicIpRestrictionModule" lockItem="true" />
+                <add name="RequestFilteringModule" lockItem="true" />
+                <add name="CustomLoggingModule" lockItem="true" />
+                <add name="CustomErrorModule" lockItem="true" />
+                <add name="FailedRequestsTracingModule" lockItem="true" />
+                <add name="CgiModule" lockItem="true" />
+                <add name="FastCgiModule" lockItem="true" />
+<!--                <add name="WebDAVModule" /> -->
+                <add name="RewriteModule" /> 
+                <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
+                <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
+                <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
+                <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
+                <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
+                <add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
+                <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
+                <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
+                <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
+                <add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
+                <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
+                <add name="ApplicationInitializationModule" lockItem="true" />
+                <add name="WebSocketModule" lockItem="true" />
+                <add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
+                <add name="ConfigurationValidationModule" lockItem="true" />
+                <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
+                <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
+                <add name="AspNetCoreModule" lockItem="true" />
+                <add name="AspNetCoreModuleV2" lockItem="true" />
+            </modules>
+            <handlers accessPolicy="Read, Script">
+<!--                <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
+                <add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
+                <add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
+                <add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
+                <add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
+                <add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
+                <add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
+                <add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
+                <add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
+                <add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
+                <add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
+                <add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
+                <add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
+                <add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
+                <add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
+                <add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
+                <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
+                <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
+                <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
+                <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
+            </handlers>
+        </system.webServer>
+    </location>
+</configuration>

BIN
.vs/goods/copilot-chat/d1c88368/sessions/5819918a-2622-411d-a933-e0c8f9331b37


BIN
.vs/goods/copilot-chat/d1c88368/sessions/6029840c-b55e-47f2-88a6-aa2db67aa4dc


BIN
.vs/goods/copilot-chat/d1c88368/sessions/65642e56-dae0-45d3-8aa7-3fe8f6bc3fe8


BIN
.vs/goods/v17/.futdcache.v2


BIN
.vs/goods/v17/.suo


+ 45 - 0
.vs/goods/v17/DocumentLayout.backup.json

@@ -0,0 +1,45 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "E:\\workspace\\goods\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{2DA0899A-B4C4-4C65-8886-C57DDAF557CA}|goods.csproj|e:\\workspace\\goods\\views\\shared\\_layout.cshtml||{40D31677-CBC0-4297-A9EF-89D907823A98}",
+      "RelativeMoniker": "D:0:0:{2DA0899A-B4C4-4C65-8886-C57DDAF557CA}|goods.csproj|solutionrelative:views\\shared\\_layout.cshtml||{40D31677-CBC0-4297-A9EF-89D907823A98}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 2,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "_Layout.cshtml",
+              "DocumentMoniker": "E:\\workspace\\goods\\Views\\Shared\\_Layout.cshtml",
+              "RelativeDocumentMoniker": "Views\\Shared\\_Layout.cshtml",
+              "ToolTip": "E:\\workspace\\goods\\Views\\Shared\\_Layout.cshtml",
+              "RelativeToolTip": "Views\\Shared\\_Layout.cshtml",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAB0AAAAKAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
+              "WhenOpened": "2024-12-31T18:34:29.21Z",
+              "EditorCaption": ""
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

+ 45 - 0
.vs/goods/v17/DocumentLayout.json

@@ -0,0 +1,45 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "E:\\workspace\\goods\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{2DA0899A-B4C4-4C65-8886-C57DDAF557CA}|goods.csproj|e:\\workspace\\goods\\views\\shared\\_layout.cshtml||{40D31677-CBC0-4297-A9EF-89D907823A98}",
+      "RelativeMoniker": "D:0:0:{2DA0899A-B4C4-4C65-8886-C57DDAF557CA}|goods.csproj|solutionrelative:views\\shared\\_layout.cshtml||{40D31677-CBC0-4297-A9EF-89D907823A98}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 2,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "_Layout.cshtml",
+              "DocumentMoniker": "E:\\workspace\\goods\\Views\\Shared\\_Layout.cshtml",
+              "RelativeDocumentMoniker": "Views\\Shared\\_Layout.cshtml",
+              "ToolTip": "E:\\workspace\\goods\\Views\\Shared\\_Layout.cshtml",
+              "RelativeToolTip": "Views\\Shared\\_Layout.cshtml",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAABiAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|",
+              "WhenOpened": "2024-12-31T18:34:29.21Z",
+              "EditorCaption": ""
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

+ 155 - 0
Controllers/HomeController.cs

@@ -0,0 +1,155 @@
+using Microsoft.AspNetCore.Mvc;
+using System.Diagnostics;
+using goods.Models;
+using goods.Models.Coupang;
+using Product = goods.Models.Coupang.Product;
+using Search = goods.Models.Coupang.Search;
+
+namespace goods.Controllers
+{
+    public class HomeController : Controller
+    {
+        private readonly ILogger<HomeController> _logger;
+        private readonly CoupangPartners _coupangPartners;
+        private readonly DBContext _context;
+
+        public HomeController(ILogger<HomeController> logger, CoupangPartners coupangPartners, DBContext context)
+        {
+            _logger = logger;
+            _coupangPartners = coupangPartners;
+            _context = context;
+        }
+
+        // 홈(메인)
+        [HttpGet("/")]
+        public IActionResult Index()
+        {
+            return View();
+        }
+
+        // 이벤트
+        [HttpGet("/Event")]
+        public IActionResult Event()
+        {
+            var data = new(int key, string href, string src, string alt)[]
+            {
+                (1, "https://link.coupang.com/a/b69T8Q", "/image/1.png", "패션 LAST SALE! 최대 70% 할인"),
+                (2, "https://link.coupang.com/a/b69UJh", "/image/2.png", "기분 좋은 선물! E쿠폰/기프티콘"),
+                (3, "https://link.coupang.com/a/b69UPW", "/image/3.png", "골드박스"),
+                (4, "https://link.coupang.com/a/b69UUT", "/image/4.png", "펜션/풀빌라 와우회원 할인"),
+                (5, "https://link.coupang.com/a/b69UYJ", "/image/5.png", "로켓프레시, 맛있는 최저가"),
+
+                (6, "https://link.coupang.com/a/b69U57", "/image/6.png", "[모바일 전용] 쿠팡라이브 럭키박스"),
+                (7, "https://link.coupang.com/a/b69VaS", "/image/7.png", "로켓패션, 역대급 할인 아울렛관"),
+                (8, "https://link.coupang.com/a/b69VfM", "/image/8.png", "로켓프레시, 마트 기획전"),
+                (9, "https://link.coupang.com/a/b69VkQ", "/image/9.png", "로켓프레시, 식단관리"),
+                (10, "https://link.coupang.com/a/b69VsR", "/image/10.png", "로켓프레시, 가격역전"),
+
+                (11, "https://link.coupang.com/a/b69Vwb", "/image/11.png", "홈인테리어, 공간별 인테리어 추천"),
+                (12, "https://link.coupang.com/a/b69VGB", "/image/12.png", "로켓패션, 로켓배송 금주의 신상"),
+                (13, "https://link.coupang.com/a/b69VKU", "/image/13.png", "가전디지털, 가성비 게이밍 모니터"),
+                (14, "https://link.coupang.com/a/b69VOH", "/image/14.png", "가전디지털, 갤럭시 버즈"),
+                (15, "https://link.coupang.com/a/b69VU1", "/image/15.png", "가전디지털, 프리미엄 게이밍 노트북"),
+
+                (16, "https://link.coupang.com/a/b69V3V", "/image/16.png", "가전디지털, 게이밍 노트북"),
+                (17, "https://link.coupang.com/a/b69V6U", "/image/17.png", "가전/디지털, 프리미엄 오디오"),
+                (18, "https://link.coupang.com/a/b69Wb9", "/image/18.png", "로켓패션, 반품 마켓"),
+                (19, "https://link.coupang.com/a/b69WhM", "/image/19.png", "쿠팡트래블, 매일 만나는 여행 특가"),
+                (20, "https://link.coupang.com/a/b69Wlr", "/image/20.png", "도서/문구, 책 한잔")
+            };
+
+            var random = new Random();
+
+            ViewBag.Data = data.OrderBy(row => random.Next()).ToArray(); ;
+
+            return View();
+        }
+
+        // 골드박스
+        [HttpGet("/GoldBox")]
+        public async Task<IActionResult> GoldBox()
+        {
+            CoupangModel coupangModel = new CoupangModel(_coupangPartners);
+            Product.Response itemList = await coupangModel.GetGoldBoxProduct();
+
+            return View(itemList);
+        }
+
+        // 인가상품
+        [HttpGet("/category/{id}")]
+        public async Task<IActionResult> Category([FromRoute] int id)
+        {
+            // Enum을 이용한 유효성 검사
+            if (!Enum.IsDefined(typeof(Request.Categories), id))
+            {
+                return BadRequest("잘못된 접근입니다.");
+            }
+
+            CoupangModel coupangModel = new CoupangModel(_coupangPartners);
+            Product.Response itemList = await coupangModel.GetCategoryProduct(id);
+
+            // 현재 카테고리 이름 조회
+            var category = (Request.Categories)id;
+            var categoryName = category.GetDisplayName();
+
+            ViewBag.CategoryName = categoryName;
+
+            return View(itemList);
+        }
+
+        // 쿠팡PL
+        [HttpGet("/pl/{id}")]
+        public async Task<IActionResult> Pl([FromRoute] int id)
+        {
+            // Enum을 이용한 유효성 검사
+            if (!Enum.IsDefined(typeof(Request.Brand), id))
+            {
+                return BadRequest("잘못된 접근입니다.");
+            }
+
+            CoupangModel coupangModel = new CoupangModel(_coupangPartners);
+            Product.Response itemList = await coupangModel.GetPlProduct(id);
+
+            // 현재 PL 이름 조회
+            var pl = (Request.Brand)id;
+            var plName = pl.GetDisplayName();
+
+            ViewBag.PlName = plName;
+
+            return View(itemList);
+        }
+
+        // 상품 검색
+        [HttpGet("/search")]
+        public async Task<IActionResult> Search(string? keyword)
+        {
+            // 검색어 처리 로직
+            if (string.IsNullOrEmpty(keyword))
+            {
+                return BadRequest("검색어를 입력해주세요.");
+            }
+
+            CoupangModel coupangModel = new CoupangModel(_coupangPartners);
+            Search.Response itemList = await coupangModel.GetSearchProduct(keyword);
+
+            ViewBag.Keyword = keyword;
+
+            // 검색 키워드를 DB에 저장
+            await _context.SearchKeyword.AddAsync(new SearchKeyword { 
+                Keyword = keyword,
+                IPAddress = Request.HttpContext.Connection.RemoteIpAddress.ToString(),
+                UserAgent = Request.Headers["User-Agent"],
+                CreatedAt = DateTime.Now
+            });
+            await _context.SaveChangesAsync();
+
+            return View(itemList);
+        }
+
+        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
+        public IActionResult Error()
+        {
+            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
+        }
+    }
+}

+ 30 - 0
Dockerfile

@@ -0,0 +1,30 @@
+# 디버그 컨테이너를 사용자 지정하는 방법과 Visual Studio 이 Dockerfile을 사용하여 더 빠른 디버깅을 위해 이미지를 빌드하는 방법을 알아보려면 https://aka.ms/customizecontainer를 참조하세요.
+
+# 이 스테이지는 VS에서 빠른 모드로 실행할 때 사용됩니다(디버그 구성의 기본값).
+FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+USER $APP_UID
+WORKDIR /app
+EXPOSE 8080
+EXPOSE 8081
+
+
+# 이 스테이지는 서비스 프로젝트를 빌드하는 데 사용됩니다.
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+ARG BUILD_CONFIGURATION=Release
+WORKDIR /src
+COPY ["goods.csproj", "."]
+RUN dotnet restore "./goods.csproj"
+COPY . .
+WORKDIR "/src/."
+RUN dotnet build "./goods.csproj" -c $BUILD_CONFIGURATION -o /app/build
+
+# 이 스테이지는 최종 스테이지에 복사할 서비스 프로젝트를 게시하는 데 사용됩니다.
+FROM build AS publish
+ARG BUILD_CONFIGURATION=Release
+RUN dotnet publish "./goods.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
+
+# 이 스테이지는 프로덕션에서 사용되거나 VS에서 일반 모드로 실행할 때 사용됩니다(디버그 구성을 사용하지 않는 경우 기본값).
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app/publish .
+ENTRYPOINT ["dotnet", "goods.dll"]

+ 17 - 0
Models/Clients.cs

@@ -0,0 +1,17 @@
+namespace goods.Models
+{
+    // 쿠팡파트너스 API
+    public class CoupangPartners
+    {
+        public readonly HttpClient httpClient;
+        public readonly string APIUrl = "https://api-gateway.coupang.com";
+        public readonly string APIKey = "2a0c765c-114b-4a6f-8efa-6a6fd84b1e92";
+        public readonly string APISecret = "2f0adf12e6ffe6cceeb5d5f59ae0d7e04de76b9d";
+
+        public CoupangPartners(HttpClient e)
+        {
+            httpClient = e;
+            httpClient.BaseAddress = new Uri(APIUrl);
+        }
+    }
+}

+ 239 - 0
Models/CoupangModel.cs

@@ -0,0 +1,239 @@
+using System.Security.Cryptography;
+using System.Text;
+using System.Text.Json;
+using goods.Models;
+using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource;
+using Product = goods.Models.Coupang.Product;
+using Search = goods.Models.Coupang.Search;
+
+namespace goods.Models.Coupang
+{
+    public class CoupangModel
+    {
+        private readonly CoupangPartners _coupangPartners;
+        private string _ChannelID;
+
+        public CoupangModel(CoupangPartners coupangPartners)
+        {
+            _coupangPartners = coupangPartners;
+            _ChannelID = "goods20241230";
+        }
+
+        /// <summary>
+        /// Generate HMAC signature for Coupang API.
+        /// </summary>
+        public static String GenerateHmac(String method, String url, String accessKey, String secretKey)
+        {
+            var dateTimeStamp = DateTime.Now.ToUniversalTime().ToString("yyMMddTHHmmssZ");
+            var message = String.Format("{0}{1}{2}", dateTimeStamp, method, url.Replace("?", String.Empty));
+
+            var keyBytes = ASCIIEncoding.Default.GetBytes(secretKey);
+            var messageBytes = ASCIIEncoding.Default.GetBytes(message);
+
+            var hashBytes = default(Byte[]);
+            using (var hash = new HMACSHA256(keyBytes))
+            {
+                hashBytes = hash.ComputeHash(messageBytes);
+            }
+
+            var signature = BitConverter.ToString(hashBytes).Replace("-", String.Empty).ToLower();
+            return String.Format("CEA algorithm=HmacSHA256, access-key={0}, signed-date={1}, signature={2}", accessKey, dateTimeStamp, signature);
+        }
+
+        // 골드박스
+        public async Task<Product.Response> GetGoldBoxProduct()
+        {
+            Product.Response parseData = new();
+
+            try
+            {
+                var urlPath = $"/v2/providers/affiliate_open_api/apis/openapi/v1/products/goldbox?subId={_ChannelID}"; // URI 경로만 전달
+
+                // Step 1: URI 생성
+                var baseUri = new Uri(_coupangPartners.APIUrl);
+                var fullUri = baseUri + urlPath;
+
+                // Step 2: HMAC 서명 생성
+                var method = "GET";
+                var signature = GenerateHmac(method, urlPath, _coupangPartners.APIKey, _coupangPartners.APISecret);
+
+                // Step 3: HttpRequestMessage 생성
+                using var request = new HttpRequestMessage(HttpMethod.Get, fullUri);
+                request.Headers.Add("Authorization", signature);
+
+                // Content-Type을 설정하려면 HttpContent를 추가
+                request.Content = new StringContent(string.Empty); // 빈 본문
+
+                // Step 4: HTTP 요청 보내기
+                var response = await _coupangPartners.httpClient.SendAsync(request);
+
+                if (response.IsSuccessStatusCode)
+                {
+                    var jsonString = await response.Content.ReadAsStringAsync();
+                    parseData = JsonSerializer.Deserialize<Product.Response>(jsonString);
+
+                    if (parseData is null)
+                    {
+                        return new Product.Response();
+                    }
+                }
+
+                response.EnsureSuccessStatusCode();
+            }
+            catch (HttpRequestException e)
+            {
+                Console.WriteLine($"Request error: {e.Message}");
+            }
+
+            return parseData;
+        }
+
+        // 카테고리 별 상품
+        public async Task<Product.Response> GetCategoryProduct(int categoryID)
+        {
+            Product.Response parseData = new();
+
+            try
+            {
+                var urlPath = $"/v2/providers/affiliate_open_api/apis/openapi/v1/products/bestcategories/{categoryID}?limit=100&subId={_ChannelID}";
+
+                // Step 1: URI 생성
+                var baseUri = new Uri(_coupangPartners.APIUrl);
+                var fullUri = baseUri + urlPath;
+
+                // Step 2: HMAC 서명 생성
+                var method = "GET";
+                var signature = GenerateHmac(method, urlPath, _coupangPartners.APIKey, _coupangPartners.APISecret);
+
+                // Step 3: HttpRequestMessage 생성
+                using var request = new HttpRequestMessage(HttpMethod.Get, fullUri);
+                request.Headers.Add("Authorization", signature);
+
+                // Content-Type을 설정하려면 HttpContent를 추가
+                request.Content = new StringContent(string.Empty); // 빈 본문
+
+                // Step 4: HTTP 요청 보내기
+                var response = await _coupangPartners.httpClient.SendAsync(request);
+
+                if (response.IsSuccessStatusCode)
+                {
+                    var jsonString = await response.Content.ReadAsStringAsync();
+                    parseData = JsonSerializer.Deserialize<Product.Response>(jsonString);
+
+                    if (parseData is null)
+                    {
+                        return new Product.Response();
+                    }
+                }
+
+                response.EnsureSuccessStatusCode();
+            }
+            catch (HttpRequestException e)
+            {
+                Console.WriteLine($"Request error: {e.Message}");
+            }
+
+            return parseData;
+        }
+
+        // 쿠팡PL 상품
+        public async Task<Product.Response> GetPlProduct(int brandID)
+        {
+            Product.Response parseData = new();
+
+            try
+            {
+                var urlPath = $"/v2/providers/affiliate_open_api/apis/openapi/v1/products/coupangPL/{brandID}?limit=100&subId={_ChannelID}";
+
+                // Step 1: URI 생성
+                var baseUri = new Uri(_coupangPartners.APIUrl);
+                var fullUri = baseUri + urlPath;
+
+                // Step 2: HMAC 서명 생성
+                var method = "GET";
+                var signature = GenerateHmac(method, urlPath, _coupangPartners.APIKey, _coupangPartners.APISecret);
+
+                // Step 3: HttpRequestMessage 생성
+                using var request = new HttpRequestMessage(HttpMethod.Get, fullUri);
+                request.Headers.Add("Authorization", signature);
+
+                // Content-Type을 설정하려면 HttpContent를 추가
+                request.Content = new StringContent(string.Empty); // 빈 본문
+
+                // Step 4: HTTP 요청 보내기
+                var response = await _coupangPartners.httpClient.SendAsync(request);
+
+                if (response.IsSuccessStatusCode)
+                {
+                    var jsonString = await response.Content.ReadAsStringAsync();
+                    parseData = JsonSerializer.Deserialize<Product.Response>(jsonString);
+
+                    if (parseData is null)
+                    {
+                        return new Product.Response();
+                    }
+                }
+
+                response.EnsureSuccessStatusCode();
+            }
+            catch (HttpRequestException e)
+            {
+                Console.WriteLine($"Request error: {e.Message}");
+            }
+
+            return parseData;
+        }
+
+        // 검색 상품
+        public async Task<Search.Response> GetSearchProduct(string keyword)
+        {
+            Search.Response parseData = new();
+
+            try
+            {
+                var urlPath = $"/v2/providers/affiliate_open_api/apis/openapi/v1/products/search";
+
+                var encodedKeyword = Uri.EscapeDataString(keyword);
+                var queryParams = $"?keyword={encodedKeyword}&limit=10&srpLinkOnly=false&subId={_ChannelID}";
+                var fullPathWithQuery = urlPath + queryParams;
+
+                // Step 1: URI 생성
+                var baseUri = new Uri(_coupangPartners.APIUrl);
+                var fullUri = new Uri(baseUri, fullPathWithQuery);
+
+                // Step 2: HMAC 서명 생성
+                var method = "GET";
+                var signature = GenerateHmac(method, fullPathWithQuery, _coupangPartners.APIKey, _coupangPartners.APISecret);
+
+                // Step 3: HttpRequestMessage 생성
+                using var request = new HttpRequestMessage(HttpMethod.Get, fullUri);
+                request.Headers.Add("Authorization", signature);
+
+                // Content-Type을 설정하려면 HttpContent를 추가
+                request.Content = new StringContent(string.Empty); // 빈 본문
+
+                // Step 4: HTTP 요청 보내기
+                var response = await _coupangPartners.httpClient.SendAsync(request);
+
+                if (response.IsSuccessStatusCode)
+                {
+                    var jsonString = await response.Content.ReadAsStringAsync();
+                    parseData = JsonSerializer.Deserialize<Search.Response>(jsonString);
+
+                    if (parseData is null)
+                    {
+                        return new Search.Response();
+                    }
+                }
+
+                response.EnsureSuccessStatusCode();
+            }
+            catch (HttpRequestException e)
+            {
+                Console.WriteLine($"Request error: {e.Message}");
+            }
+
+            return parseData;
+        }
+    }
+}

+ 26 - 0
Models/DBContext.cs

@@ -0,0 +1,26 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+
+namespace goods.Models
+{
+    public class DBContext : DbContext
+    {
+        public DBContext(DbContextOptions<DBContext> options) : base(options)
+        {
+        
+        }
+
+        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+        {
+            if (!optionsBuilder.IsConfigured)
+            {
+                string connection = "Server=192.168.0.110;Database=goods;User ID=sa;Password=@@20120726KKh;Trusted_Connection=True;Encrypt=False;";
+                optionsBuilder.UseSqlServer(connection);
+            }
+        }
+
+        public DbSet<SearchKeyword>? SearchKeyword { get; set; }
+    }
+}

+ 9 - 0
Models/ErrorViewModel.cs

@@ -0,0 +1,9 @@
+namespace goods.Models
+{
+    public class ErrorViewModel
+    {
+        public string? RequestId { get; set; }
+
+        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
+    }
+}

+ 139 - 0
Models/Request.cs

@@ -0,0 +1,139 @@
+using Microsoft.AspNetCore.Mvc;
+using System.ComponentModel.DataAnnotations;
+using System.Reflection;
+
+namespace goods.Models.Coupang
+{
+    /*
+     * 쿠팡파트너스 API
+     * 골드박스
+     * https://api-gateway.coupang.com/v2/providers/affiliate_open_api/apis/openapi/v1/products​/goldbox
+     * 
+     * 카테고리 별 베스트 상품
+     * https://api-gateway.coupang.com/v2/providers/affiliate_open_api/apis/openapi/v1/products/bestcategories/{categoryID}
+     * 
+     * 쿠팡PL 상품
+     * https://api-gateway.coupang.com/v2/providers/affiliate_open_api/apis/openapi/v1/products/coupangPL/{brandID}
+     * 
+     * 쿠팡 검색
+     * https://api-gateway.coupang.com/v2/providers/affiliate_open_api/apis/openapi/v1/products/search
+     */
+
+    // 검색요청 변수
+    public class Request
+    {
+        // 쿠팡 카테고리
+        public enum Categories
+        {
+            [Display(Name = "여성패션")]
+            WomenFashion = 1001,
+
+            [Display(Name = "남성패션")]
+            MenFashion = 1002,
+
+            [Display(Name = "뷰티")]
+            Beauty = 1010,
+
+            [Display(Name = "출산/유아동")]
+            BabyAndKids = 1011,
+
+            [Display(Name = "식품")]
+            Food = 1012,
+
+            [Display(Name = "주방용품")]
+            KitchenSupplies = 1013,
+
+            [Display(Name = "생활용품")]
+            HouseholdItems = 1014,
+
+            [Display(Name = "홈인테리어")]
+            HomeInterior = 1015,
+
+            [Display(Name = "가전디지털")]
+            ElectronicsAndDigital = 1016,
+
+            [Display(Name = "스포츠/레저")]
+            SportsAndLeisure = 1017,
+
+            [Display(Name = "자동차용품")]
+            AutomotiveSupplies = 1018,
+
+            [Display(Name = "도서/음반/DVD")]
+            BooksMusicDVDs = 1019,
+
+            [Display(Name = "완구/취미")]
+            ToysAndHobbies = 1020,
+
+            [Display(Name = "문구/오피스")]
+            StationeryAndOffice = 1021,
+
+            [Display(Name = "헬스/건강식품")]
+            HealthAndSupplements = 1024,
+
+            [Display(Name = "국내여행")]
+            DomesticTravel = 1025,
+
+            [Display(Name = "해외여행")]
+            OverseasTravel = 1026,
+
+            [Display(Name = "반려동물용품")]
+            PetSupplies = 1029,
+
+            [Display(Name = "유아동패션")]
+            KidsFashion = 1030
+        }
+
+        // 쿠팡PL 브랜드
+        public enum Brand
+        {
+            [Display(Name = "탐사")]
+            Tamsa = 1001,
+
+            [Display(Name = "코멧")]
+            Comet = 1002,
+
+            [Display(Name = "Gomgom")]
+            Gomgom = 1003,
+
+            [Display(Name = "줌")]
+            Zoom = 1004,
+
+            [Display(Name = "곰곰")]
+            GomgomKorean = 1006,
+
+            [Display(Name = "꼬리별")]
+            Kkoribyul = 1007,
+
+            [Display(Name = "베이스알파에센셜")]
+            BaseAlphaEssential = 1008,
+
+            [Display(Name = "비타할로")]
+            VitaHalo = 1010,
+
+            [Display(Name = "비지엔젤")]
+            BeeZNgel = 1011
+        }
+
+        public Categories? Category { get; set; } = null;
+
+        public Brand? BrandID { get; set; } = null;
+
+        // 검색어
+        public string? Keyword { get; set; } = null;
+    }
+
+    public static class EnumExtensions
+    {
+        public static string GetDisplayName(this Enum enumValue)
+        {
+            var enumType = enumValue.GetType();
+            var member = enumType.GetMember(enumValue.ToString());
+
+            // DisplayAttribute 읽기
+            var attribute = member[0].GetCustomAttribute<DisplayAttribute>();
+
+            // Name 속성 반환 (없을 경우 기본값 설정)
+            return attribute?.Name ?? enumValue.ToString();
+        }
+    }
+}

+ 49 - 0
Models/Response/Product.cs

@@ -0,0 +1,49 @@
+using System.Text.Json.Serialization;
+
+namespace goods.Models.Coupang.Product
+{
+    public class Response
+    {
+        [JsonPropertyName("rCode")]
+        public string RCode { get; set; }
+
+        [JsonPropertyName("rMessage")]
+        public string RMessage { get; set; }
+
+        [JsonPropertyName("data")]
+        public List<Data> Data { get; set; }
+    }
+
+    public class Data
+    {
+        [JsonPropertyName("categoryName")]
+        public string CategoryName { get; set; }
+
+        [JsonPropertyName("keyword")]
+        public string Keyword { get; set; }
+
+        [JsonPropertyName("rank")]
+        public int Rank { get; set; }
+
+        [JsonPropertyName("isRocket")]
+        public bool IsRocket { get; set; }
+
+        [JsonPropertyName("isFreeShipping")]
+        public bool IsFreeShipping { get; set; }
+
+        [JsonPropertyName("productId")]
+        public long ProductId { get; set; }
+
+        [JsonPropertyName("productImage")]
+        public string ProductImage { get; set; }
+
+        [JsonPropertyName("productName")]
+        public string ProductName { get; set; }
+
+        [JsonPropertyName("productPrice")]
+        public int ProductPrice { get; set; }
+
+        [JsonPropertyName("productUrl")]
+        public string ProductUrl { get; set; }
+    }
+}

+ 55 - 0
Models/Response/Search.cs

@@ -0,0 +1,55 @@
+using System.Text.Json.Serialization;
+
+namespace goods.Models.Coupang.Search
+{
+    public class Response
+    {
+        [JsonPropertyName("rCode")]
+        public string RCode { get; set; }
+
+        [JsonPropertyName("rMessage")]
+        public string RMessage { get; set; }
+
+        [JsonPropertyName("data")]
+        public DataContainer Data { get; set; } // data를 별도 객체로 매핑
+    }
+
+    public class DataContainer
+    {
+        [JsonPropertyName("landingUrl")]
+        public string LandingUrl { get; set; }
+
+        [JsonPropertyName("productData")]
+        public List<Data> ProductData { get; set; } // productData를 List로 매핑
+    }
+
+    public class Data
+    {
+        [JsonPropertyName("keyword")]
+        public string Keyword { get; set; }
+
+        [JsonPropertyName("rank")]
+        public int Rank { get; set; }
+
+        [JsonPropertyName("isRocket")]
+        public bool IsRocket { get; set; }
+
+        [JsonPropertyName("isFreeShipping")]
+        public bool IsFreeShipping { get; set; }
+
+        [JsonPropertyName("productId")]
+        public long ProductId { get; set; }
+
+        [JsonPropertyName("productImage")]
+        public string ProductImage { get; set; }
+
+        [JsonPropertyName("productName")]
+        public string ProductName { get; set; }
+
+        [JsonPropertyName("productPrice")]
+        public int ProductPrice { get; set; }
+
+        [JsonPropertyName("productUrl")]
+        public string ProductUrl { get; set; }
+    }
+}

+ 26 - 0
Models/SearchKeyword.cs

@@ -0,0 +1,26 @@
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace goods.Models
+{
+    public class SearchKeyword
+    {
+        [Key]
+        [Required]
+        [Column("id", TypeName = "int")]
+        public int Id { get; set; }
+
+        [Column("keyword", TypeName = "nvarchar")]
+        public string? Keyword { get; set; }
+
+        [Column("ip_address", TypeName = "nchar")]
+        public string? IPAddress { get; set; }
+
+        [Column("user_agent", TypeName = "nchar")]
+        public string? UserAgent { get; set; }
+
+        [Column("created_at", TypeName = "datetime")]
+        [DataType(DataType.DateTime)]
+        public DateTime CreatedAt { get; set; }
+    }
+}

+ 37 - 0
Program.cs

@@ -0,0 +1,37 @@
+using goods.Models;
+using Microsoft.EntityFrameworkCore;
+
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+builder.Services.AddControllersWithViews();
+
+// DB ¿¬°á
+builder.Services.AddDbContext<DBContext>(options =>
+    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
+
+// HttpClient »ç¿ë
+builder.Services.AddHttpClient<CoupangPartners>();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (!app.Environment.IsDevelopment())
+{
+    app.UseExceptionHandler("/Home/Error");
+    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+    app.UseHsts();
+}
+
+app.UseHttpsRedirection();
+app.UseStaticFiles();
+
+app.UseRouting();
+
+app.UseAuthorization();
+
+app.MapControllerRoute(
+    name: "default",
+    pattern: "{controller=Home}/{action=Index}/{id?}");
+
+app.Run();

+ 49 - 0
Properties/launchSettings.json

@@ -0,0 +1,49 @@
+{
+  "profiles": {
+    "http": {
+      "commandName": "Project",
+      "launchBrowser": true,
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      },
+      "dotnetRunMessages": true,
+      "applicationUrl": "http://localhost:5234"
+    },
+    "https": {
+      "commandName": "Project",
+      "launchBrowser": true,
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      },
+      "dotnetRunMessages": true,
+      "applicationUrl": "https://localhost:7236;http://localhost:5234"
+    },
+    "IIS Express": {
+      "commandName": "IISExpress",
+      "launchBrowser": true,
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "Container (Dockerfile)": {
+      "commandName": "Docker",
+      "launchBrowser": true,
+      "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
+      "environmentVariables": {
+        "ASPNETCORE_HTTPS_PORTS": "8081",
+        "ASPNETCORE_HTTP_PORTS": "8080"
+      },
+      "publishAllPorts": true,
+      "useSSL": true
+    }
+  },
+  "$schema": "http://json.schemastore.org/launchsettings.json",
+  "iisSettings": {
+    "windowsAuthentication": false,
+    "anonymousAuthentication": true,
+    "iisExpress": {
+      "applicationUrl": "http://localhost:10216",
+      "sslPort": 44362
+    }
+  }
+}

+ 33 - 0
Views/Home/Category.cshtml

@@ -0,0 +1,33 @@
+@model goods.Models.Coupang.Product.Response
+
+@{
+    ViewData["Title"] = "인기상품";
+}
+
+<div id="products" class="container-2xl mx-auto">
+    <h1 class="text-2xl mb-2 text-center">@ViewData["Title"] - @ViewBag.CategoryName</h1>
+    <hr/>
+    <div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg\:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-8 gap-4 mt-3">
+        @foreach (var row in Model.Data)
+        {
+            <div>
+                <a href="@row.ProductUrl" rel="external" target="_blank">
+                    <figure>
+                        <div class="img-box">
+                            <img src="@row.ProductImage" alt="@row.ProductName" />
+                        </div>
+                        <figcaption>@row.ProductName</figcaption>
+                        <p>@row.ProductPrice.ToString("N0") 원</p>
+                        @if(row.IsRocket) {
+                            <span>로켓배송</span>
+                        }
+                        @if (row.IsFreeShipping)
+                        {
+                            <span>무료배송</span>
+                        }
+                    </figure>
+                </a>
+            </div>
+        }
+    </div>
+</div>

+ 19 - 0
Views/Home/Event.cshtml

@@ -0,0 +1,19 @@
+@{
+    ViewData["Title"] = "이벤트";
+    var data = ((int key, string href, string src, string alt)[])ViewBag.Data;
+}
+
+<div id="event" class="container mx-auto">
+    <h1 class="text-2xl mb-2 text-center">@ViewData["Title"]</h1>
+
+    <hr/>
+
+    <div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4 mt-3">
+        @foreach (var row in data)
+        {
+            <div>
+                <a href="@row.href" rel="external" target="_blank"><img src="@row.src" alt="@row.alt" /></a>
+            </div>
+        }
+    </div>
+</div>

+ 33 - 0
Views/Home/GoldBox.cshtml

@@ -0,0 +1,33 @@
+@model goods.Models.Coupang.Product.Response
+
+@{
+    ViewData["Title"] = "골드박스";
+}
+
+<div id="products" class="container-2xl mx-auto">
+    <h1 class="text-2xl mb-2 text-center">@ViewData["Title"]</h1>
+    <hr/>
+    <div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg\:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-8 gap-4 mt-3">
+        @foreach (var row in Model.Data)
+        {
+            <div>
+                <a href="@row.ProductUrl" rel="external" target="_blank">
+                    <figure>
+                        <div class="img-box">
+                            <img src="@row.ProductImage" alt="@row.ProductName" />
+                        </div>
+                        <figcaption>@row.ProductName</figcaption>
+                        <p>@row.ProductPrice.ToString("N0") 원</p>
+                        @if(row.IsRocket) {
+                            <span>로켓배송</span>
+                        }
+                        @if (row.IsFreeShipping)
+                        {
+                            <span>무료배송</span>
+                        }
+                    </figure>
+                </a>
+            </div>
+        }
+    </div>
+</div>

+ 60 - 0
Views/Home/Index.cshtml

@@ -0,0 +1,60 @@
+@{
+    ViewData["Title"] = "";
+}
+
+<div id="home" class="container mx-auto">
+    <div class="flex flex-col sm:flex-row sm:justify-around items-center gap-2 sm:mb-2">
+        <div class="flex-initial">
+            <a href="https://link.coupang.com/a/b69mu5" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/594227?subId=&traceId=V0-301-879dd1202e5c73b2-I594227&w=728&h=90" alt=""></a>
+        </div>
+        <div class="flex-initial">
+            <a href="https://link.coupang.com/a/b69qm1" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/608229?subId=&traceId=V0-301-969b06e95b87326d-I608229&w=728&h=90" alt=""></a>
+        </div>
+    </div>
+    
+    <div class="flex flex-col sm:flex-row sm:justify-around items-center gap-2 mb-2">
+        <div class="flex-initial">
+            <a href="https://link.coupang.com/a/b69quj" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/630877?subId=&traceId=V0-301-bae0f72e5e59e45f-I630877&w=728&h=90" alt=""></a>
+        </div>
+        <div class="flex-initial">
+            <a href="https://link.coupang.com/a/b69qDj" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/630871?subId=&traceId=V0-301-50c6c2b97fba9aee-I630871&w=728&h=90" alt=""></a>
+        </div>
+    </div>
+
+    <div class="flex flex-col sm:flex-row sm:justify-around items-center gap-2 sm:mb-2">
+        <div class="flex-initial">
+            <a href="https://link.coupang.com/a/b69sgZ" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/630888?subId=&traceId=V0-301-371ae01f4226dec2-I630888&w=728&h=90" alt=""></a>
+        </div>
+        <div class="flex-initial">
+            <a href="https://link.coupang.com/a/b69sBe" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/630872?subId=&traceId=V0-301-5a8c79a76485eb21-I630872&w=728&h=90" alt=""></a>
+        </div>
+    </div>
+
+    <br/>
+    <p class="text-xl mb-2">추천 상품</p>
+    <iframe src="https://ads-partners.coupang.com/widgets.html?id=827908&template=carousel&trackingCode=AF0305179&subId=&width=1920&height=240&tsource=" frameborder="0" scrolling="no" referrerpolicy="unsafe-url" browsingtopics></iframe>
+
+    <br />
+    <p class="text-xl mb-2">관심 상품</p>
+    <iframe src="https://ads-partners.coupang.com/widgets.html?id=827909&template=carousel&trackingCode=AF0305179&subId=&width=1920&height=240&tsource=" frameborder="0" scrolling="no" referrerpolicy="unsafe-url" browsingtopics></iframe>
+
+    <br/>
+
+    <div class="columns-2 sm:columns-3 lg:columns-6 gap-2 mb-2">
+        <a href="https://link.coupang.com/a/b69sSU" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/683771?subId=&traceId=V0-301-5f9bd61900e673c0-I683771&w=300&h=250" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69tJj" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827913?subId=&traceId=V0-301-f5c692db558def48-I827913&w=300&h=250" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69yzl" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827916?subId=&traceId=V0-301-2f679fc6bd8f2e58-I827916&w=300&h=250" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69yDA" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827918?subId=&traceId=V0-301-2b8ef06377ec8f50-I827918&w=300&h=250" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69yP0" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827919?subId=&traceId=V0-301-5f4982b43e2b4522-I827919&w=300&h=250" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69yVW" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827920?subId=&traceId=V0-301-7e6e8eb8ddfa1bfb-I827920&w=300&h=250" alt="" width="100%"></a>
+    </div>
+
+    <div class="grid grid-cols-1 sm:grid-cols-3 lg:grid-cols-6 gap-2">
+        <a href="https://link.coupang.com/a/b69AdH" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827923?subId=&traceId=V0-301-c1744fa69c93f626-I827923&w=320&h=100" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69AJ9" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827929?subId=&traceId=V0-301-0fd2df58973b32a5-I827929&w=320&h=100" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69ANo" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827931?subId=&traceId=V0-301-12cd6d67384e2afb-I827931&w=320&h=100" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69ARI" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827933?subId=&traceId=V0-301-efafde73812c2264-I827933&w=320&h=100" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69AVu" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827934?subId=&traceId=V0-301-8be2627c04ed5569-I827934&w=320&h=100" alt="" width="100%"></a>
+        <a href="https://link.coupang.com/a/b69A0U" target="_blank" referrerpolicy="unsafe-url"><img src="https://ads-partners.coupang.com/banners/827811?subId=&traceId=V0-301-5079b8362432a905-I827811&w=320&h=100" alt="" width="100%"></a>
+    </div>
+</div>

+ 33 - 0
Views/Home/Pl.cshtml

@@ -0,0 +1,33 @@
+@model goods.Models.Coupang.Product.Response
+
+@{
+    ViewData["Title"] = "쿠팡PL";
+}
+
+<div id="products" class="container-2xl mx-auto">
+    <h1 class="text-2xl mb-2 text-center">@ViewData["Title"] - @ViewBag.PlName</h1>
+    <hr/>
+    <div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg\:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-8 gap-4 mt-3">
+        @foreach (var row in Model.Data)
+        {
+            <div>
+                <a href="@row.ProductUrl" rel="external" target="_blank">
+                    <figure>
+                        <div class="img-box">
+                            <img src="@row.ProductImage" alt="@row.ProductName" />
+                        </div>
+                        <figcaption>@row.ProductName</figcaption>
+                        <p>@row.ProductPrice.ToString("N0") 원</p>
+                        @if(row.IsRocket) {
+                            <span>로켓배송</span>
+                        }
+                        @if (row.IsFreeShipping)
+                        {
+                            <span>무료배송</span>
+                        }
+                    </figure>
+                </a>
+            </div>
+        }
+    </div>
+</div>

+ 31 - 0
Views/Home/Search.cshtml

@@ -0,0 +1,31 @@
+@model goods.Models.Coupang.Search.Response
+
+@{
+    ViewData["Title"] = "상품 검색";
+}
+
+<div id="products" class="container-2xl mx-auto">
+    <h1 class="text-2xl mb-2 text-center">@ViewData["Title"]</h1>
+    <hr/>
+    <div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg\:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-7 gap-4 mt-3">
+        @foreach (var row in Model.Data.ProductData)
+        {
+            <div>
+                <a href="@row.ProductUrl" rel="external" target="_blank">
+                    <figure>
+                        <img src="@row.ProductImage" alt="@row.ProductName"/>
+                        <figcaption>@row.ProductName</figcaption>
+                        <p>@row.ProductPrice.ToString("N0") 원</p>
+                        @if(row.IsRocket) {
+                            <span>로켓배송</span>
+                        }
+                        @if (row.IsFreeShipping)
+                        {
+                            <span>무료배송</span>
+                        }
+                    </figure>
+                </a>
+            </div>
+        }
+    </div>
+</div>

+ 307 - 0
Views/SCSS/site.scss

@@ -0,0 +1,307 @@
+/**
+    2024.12.28 작성
+    작성자: 김진오
+*/
+html, body {
+    height: 100vh;
+
+    > div {
+        height: inherit;
+    }
+}
+
+header {
+    text-align: center;
+    padding: 10px 20px 10px 10px;
+    border-bottom: 1px solid #ddd;
+
+    form {
+        margin: 0 auto;
+        border: none;
+
+        img {
+            display: none;
+            width: 15%;
+            flex-basis: auto;
+            flex-shrink: 2;
+            flex-grow: 0;
+            padding: 0 10px 0 0;
+            max-width: 50px;
+            cursor: pointer;
+        }
+
+        input {
+            border: 1px solid #bbb;
+            padding: 6px 5px;
+            width: 30%;
+            border-radius: 5px;
+            flex-grow: 2;
+            width: 73%;
+        }
+
+        button {
+            border: 1px solid #bbb;
+            padding: 6px 10px;
+            border-radius: 5px;
+            margin-left: 5px;
+            flex-grow: 1;
+            width: 22%;
+
+            &:hover {
+                color: #000;
+                background-color: #f0f0f0;
+            }
+        }
+    }
+}
+
+aside {
+    position: relative;
+    min-width: 150px;
+    max-width: 240px;
+    background-color: #2f2f2f;
+    border-right: 1px solid #535353;
+    overflow: hidden;
+    transition: transform .2s;
+    z-index: 3;
+
+    > section {
+        position: relative;
+        height: 10%;
+        padding: 15px 7px;
+        min-height: 107px;
+        background-color: #1583b7;
+    }
+
+    hr {
+        border-color: #555555;
+    }
+
+    > nav {
+        overflow-y: auto;
+        height: calc(100vh - 10%);
+        padding: 10px 30px 90px 30px;
+
+        hr {
+            margin: 10px 0;
+        }
+
+        ul {
+            padding-left: 7%;
+            list-style: none;
+
+            li {
+                color: #d3d3d3;
+
+                > strong {
+                    font-size: 17px;
+                    font-weight: 600;
+                }
+
+                a {
+                    &:hover {
+                        color: #fff;
+                        text-decoration: underline
+                    }
+                }
+            }
+
+            &:first-child {
+                li {
+                    &:nth-of-type(2) {
+                        color: #FFD700;
+                    }
+
+                    &:nth-of-type(3) {
+                        color: #6cfda1;
+                    }
+                }
+            }
+        }
+
+        details {
+            summary {
+                cursor: pointer;
+                color: #d3d3d3;
+                font-size: 1.063rem;
+                font-weight: 600;
+                margin-bottom: 2px;
+            }
+
+            &:nth-of-type(1) {
+                summary {
+                    color: #9e37f9;
+                }
+            }
+
+            &:nth-of-type(2) {
+                summary {
+                    color: #f18949;
+                }
+            }
+        }
+    }
+}
+
+main {
+    height: inherit;
+    overflow-y: auto;
+
+    > div {
+        height: inherit;
+
+        > div {
+            padding: 10px 20px;
+        }
+    }
+}
+
+footer {
+    padding: 10px;
+    border-top: 1px solid #ddd;
+
+    span {
+        font-size: 0.75rem;
+    }
+
+    small {
+        font-size: 0.75rem;
+        color: #0a781d;
+    }
+}
+
+#home {
+    iframe {
+        width: 100%;
+        border: 1px solid #ddd;
+    }
+}
+
+#event {
+    img {
+        &:hover {
+            transform: scale(99%);
+            outline: 1px solid red;
+            border-radius: 3px;
+        }
+    }
+}
+
+#products {
+    a {
+        .img-box {
+            position: relative;
+            max-height: 20vh;
+            overflow: hidden;
+        }
+
+        img {
+            transition: transform .2s;
+            width: 100%;
+        }
+
+        &:hover {
+            img {
+                transform: scale(99%);
+            }
+
+            .img-box {
+                outline: 1px solid red;
+                border-radius: 3px;
+            }
+
+            figcaption {
+                text-decoration: underline;
+            }
+
+            span {
+                text-decoration: none;
+            }
+        }
+    }
+
+    figure {
+        figcaption {
+            font-size: 0.875rem;
+            padding-top: 6px;
+        }
+
+        p {
+            padding: 5px 0 0 0;
+            color: #cb1400;
+            font-weight: bold;
+        }
+
+        > img {
+            &:hover {
+                transform: scale(99%);
+                outline: 1px solid red;
+                border-radius: 3px;
+            }
+        }
+
+        span {
+            font-size: 0.75rem;
+            font-weight: 600;
+            padding: 3px 7px;
+            border-radius: 5px;
+
+            &:nth-of-type(1) {
+                color: #f1f1f1;
+                background-color: rgb(68 156 190);
+            }
+
+            &:nth-of-type(2) {
+                color: #2f2f2f;
+                background-color: rgb(251 191 36 / var(--tw-text-opacity, 1));
+            }
+        }
+    }
+}
+
+.overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(0, 0, 0, 0.5);
+    z-index: 2;
+    display: none;
+
+    > img {
+        top: 10px;
+        right: 20px;
+        position: absolute;
+        width: 10%;
+        cursor: pointer;
+    }
+}
+
+.overlay.show {
+    display: block;
+}
+
+/* 768px 미만일 때: 왼쪽으로 숨김 */
+@media screen and (max-width: 767px) {
+    aside {
+        position: absolute;
+        transform: translateX(-100%);
+    }
+
+    header {
+        form {
+            img {
+                display: block;
+            }
+        }
+    }
+}
+
+/* 768px 이상일 때: 다시 보임 */
+@media screen and (min-width: 768px) {
+    aside {
+        position: relative;
+        transform: translateX(0) !important;
+    }
+}

+ 4 - 0
Views/SCSS/tailwind.scss

@@ -0,0 +1,4 @@
+/* tailwind.css */
+@tailwind base;
+@tailwind components;
+@tailwind utilities;

+ 25 - 0
Views/Shared/Error.cshtml

@@ -0,0 +1,25 @@
+@model ErrorViewModel
+@{
+    ViewData["Title"] = "Error";
+}
+
+<h1 class="text-danger">Error.</h1>
+<h2 class="text-danger">An error occurred while processing your request.</h2>
+
+@if (Model.ShowRequestId)
+{
+    <p>
+        <strong>Request ID:</strong> <code>@Model.RequestId</code>
+    </p>
+}
+
+<h3>Development Mode</h3>
+<p>
+    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
+</p>
+<p>
+    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>
+    It can result in displaying sensitive information from exceptions to end users.
+    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
+    and restarting the app.
+</p>

+ 124 - 0
Views/Shared/_Layout.cshtml

@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>
+        @ViewData["Title"]
+        @if (ViewData["Title"] != "")
+        {
+            <text>-</text>
+        }
+        쿠팡 상품 카탈로그
+    </title>
+
+    <meta http-equiv="refresh" content="3000" />
+    <meta name="description" content="다양한 쿠팡의 특별 상품을 파악 및 검색해보실 수 있습니다." />
+    <meta name="keywords" content="쿠팡,쿠팡인기상품,쿠팡PL,쿠팡골드박스,쿠팡이벤트,쿠팡상품,coupang,쿠팡카탈로그,쿠팡검색,쿠팡파트너스" />
+    <meta name="author" content="김진오" />
+    <meta name="naver-site-verification" content="534321e6b7402169fc787ae2f795049aef0232e3" />
+
+    <link rel="stylesheet" href="~/css/tailwind.output.css" asp-append-version="true" />
+    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
+
+    @await RenderSectionAsync("Styles", required: false)
+</head>
+<body>
+
+    <div class="overlay" id="overlay">
+        <img id="btnCancel" src="/image/btn-cancel.svg" alt="X" />
+    </div>
+
+    <div class="flex flex-row flex-nowrap">
+        <aside class="flex-initial border-r-1">
+            <section>
+                <iframe src="https://coupa.ng/cgY9Th" width="100%" height="75" frameborder="0" scrolling="no" referrerpolicy="unsafe-url" browsingtopics></iframe>
+            </section>
+            <hr/>
+            <nav>
+                <ul class="list-outside">
+                    <li><a asp-area="" asp-controller="Home" asp-action="Index"> 처음으로</a></li>
+                    <li><a asp-area="" asp-controller="Home" asp-action="GoldBox">골드박스</a></li>
+                    <li><a asp-area="" asp-controller="Home" asp-action="Event"> 이벤트</a></li>
+                </ul>
+
+                <hr/>
+
+                <details open>
+                    <summary>인기상품</summary>
+                    <ul class="list-outside">
+                        <li><a href="/category/1001">여성패션</a></li>
+                        <li><a href="/category/1002">남성패션</a></li>
+                        <li><a href="/category/1010">뷰티</a></li>
+                        <li><a href="/category/1011">출산/유아동</a></li>
+                        <li><a href="/category/1012">식품</a></li>
+                        <li><a href="/category/1013">주방용품</a></li>
+                        <li><a href="/category/1014">생활용품</a></li>
+                        <li><a href="/category/1015">홈인테리어</a></li>
+                        <li><a href="/category/1016">가전디지털</a></li>
+                        <li><a href="/category/1017">스포츠/레저</a></li>
+                        <li><a href="/category/1018">자동차용품</a></li>
+                        <li><a href="/category/1019">도서/음반/DVD</a></li>
+                        <li><a href="/category/1020">완구/취미</a></li>
+                        <li><a href="/category/1021">문구/오피스</a></li>
+                        <li><a href="/category/1024">헬스/건강식품</a></li>
+                        <li><a href="/category/1025">국내여행</a></li>
+                        <li><a href="/category/1026">해외여행</a></li>
+                        <li><a href="/category/1029">반려동물용품</a></li>
+                        <li><a href="/category/1030">유아동패션</a></li>
+                    </ul>
+                </details>
+
+                <hr/>
+
+                <details open>
+                    <summary>쿠팡PL</summary>
+                    <ul class="list-outside">
+                        <li><a href="/pl/1001">탐사</a></li>
+                        <li><a href="/pl/1002">코멧</a></li>
+                        <li><a href="/pl/1003">Gomgom</a></li>
+                        <li><a href="/pl/1004">줌</a></li>
+                        <li><a href="/pl/1006">곰곰</a></li>
+                        <li><a href="/pl/1007">꼬리별</a></li>
+                        <li><a href="/pl/1008">베이스알파에센셜</a></li>
+                        <li><a href="/pl/1010">비타할로</a></li>
+                        <li><a href="/pl/1011">비지엔젤</a></li>
+                    </ul>
+                </details>
+            </nav>
+        </aside>
+
+        <main class="flex-initial w-full">
+            <div class="flex flex-col w-full">
+                <header class="flex-initial w-full">
+                    <form name="f_search" id="fSearch" method="get" class="w-full sm:w-1/2" accept-charset="UTF-8" rel="search" autocomplete="off" asp-controller="Home" asp-action="Search">
+                        <div class="flex items-center rounded overflow-hidden">
+                            <img id="btnMenuToggle" src="/image/btn-menu.svg" alt="메뉴"/>
+                            <input type="search" name="keyword" class="flex-grow outline-none" placeholder="인기상품을 검색합니다." autofocus value="@ViewBag?.Keyword" />
+                            <button type="submit" id="btnSearchSubmit">검색</button>
+                        </div>
+                    </form>
+                </header>
+                <div class="flex-1 w-full">
+                    @RenderBody()
+                </div>
+                <footer class="flex-initial w-full">
+                    <div class="flex flex-col pb-8 sm:flex-row sm:justify-between items-center sm:pb-0">
+                        <div class="flex-none mb-2 sm:mb-0">
+                            <span>Copyright &copy; @DateTime.Now.Year Kim jino All rights reserved.</span>
+                        </div>
+                        <div class="flex-grow text-center sm:text-right"">
+                            <small>※ 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.</small>
+                        </div>
+                    </div>
+                </footer>
+            </div>
+        </main>
+    </div>
+    
+    <script src="~/lib/jquery/dist/jquery.min.js"></script>
+    <script src="~/js/site.js" asp-append-version="true"></script>
+
+    @await RenderSectionAsync("Scripts", required: false)
+</body>
+</html>

+ 48 - 0
Views/Shared/_Layout.cshtml.css

@@ -0,0 +1,48 @@
+/* Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
+for details on configuring this project to bundle and minify static web assets. */
+
+a.navbar-brand {
+  white-space: normal;
+  text-align: center;
+  word-break: break-all;
+}
+
+a {
+  color: #0077cc;
+}
+
+.btn-primary {
+  color: #fff;
+  background-color: #1b6ec2;
+  border-color: #1861ac;
+}
+
+.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
+  color: #fff;
+  background-color: #1b6ec2;
+  border-color: #1861ac;
+}
+
+.border-top {
+  border-top: 1px solid #e5e5e5;
+}
+.border-bottom {
+  border-bottom: 1px solid #e5e5e5;
+}
+
+.box-shadow {
+  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
+}
+
+button.accept-policy {
+  font-size: 1rem;
+  line-height: inherit;
+}
+
+.footer {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  white-space: nowrap;
+  line-height: 60px;
+}

+ 2 - 0
Views/Shared/_ValidationScriptsPartial.cshtml

@@ -0,0 +1,2 @@
+<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
+<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

+ 3 - 0
Views/_ViewImports.cshtml

@@ -0,0 +1,3 @@
+@using goods
+@using goods.Models
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

+ 3 - 0
Views/_ViewStart.cshtml

@@ -0,0 +1,3 @@
+@{
+    Layout = "_Layout";
+}

+ 8 - 0
appsettings.Development.json

@@ -0,0 +1,8 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  }
+}

+ 12 - 0
appsettings.json

@@ -0,0 +1,12 @@
+{
+    "Logging": {
+        "LogLevel": {
+            "Default": "Information",
+            "Microsoft.AspNetCore": "Warning"
+        }
+    },
+    "AllowedHosts": "*",
+    "ConnectionStrings": {
+        "DefaultConnection": "Server=192.168.0.110;Database=goods;User ID=sa;Password=@@20120726KKh;Encrypt=False;"
+    }
+}

BIN
bin/Debug/net8.0/Azure.Core.dll


BIN
bin/Debug/net8.0/Azure.Identity.dll


BIN
bin/Debug/net8.0/Microsoft.Bcl.AsyncInterfaces.dll


BIN
bin/Debug/net8.0/Microsoft.Data.SqlClient.dll


BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll


BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.Relational.dll


BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.SqlServer.dll


BIN
bin/Debug/net8.0/Microsoft.EntityFrameworkCore.dll


BIN
bin/Debug/net8.0/Microsoft.Extensions.Caching.Abstractions.dll


BIN
bin/Debug/net8.0/Microsoft.Extensions.Caching.Memory.dll


BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll


BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll


BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll


BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll


BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.dll


BIN
bin/Debug/net8.0/Microsoft.Extensions.Options.dll


BIN
bin/Debug/net8.0/Microsoft.Extensions.Primitives.dll


BIN
bin/Debug/net8.0/Microsoft.Identity.Client.Extensions.Msal.dll


BIN
bin/Debug/net8.0/Microsoft.Identity.Client.dll


BIN
bin/Debug/net8.0/Microsoft.IdentityModel.Abstractions.dll


BIN
bin/Debug/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll


BIN
bin/Debug/net8.0/Microsoft.IdentityModel.Logging.dll


BIN
bin/Debug/net8.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll


BIN
bin/Debug/net8.0/Microsoft.IdentityModel.Protocols.dll


BIN
bin/Debug/net8.0/Microsoft.IdentityModel.Tokens.dll


BIN
bin/Debug/net8.0/Microsoft.SqlServer.Server.dll


BIN
bin/Debug/net8.0/Microsoft.Win32.SystemEvents.dll


BIN
bin/Debug/net8.0/System.ClientModel.dll


BIN
bin/Debug/net8.0/System.Configuration.ConfigurationManager.dll


BIN
bin/Debug/net8.0/System.Diagnostics.DiagnosticSource.dll


BIN
bin/Debug/net8.0/System.Drawing.Common.dll


BIN
bin/Debug/net8.0/System.Formats.Asn1.dll


BIN
bin/Debug/net8.0/System.IO.Pipelines.dll


BIN
bin/Debug/net8.0/System.IdentityModel.Tokens.Jwt.dll


BIN
bin/Debug/net8.0/System.Memory.Data.dll


BIN
bin/Debug/net8.0/System.Runtime.Caching.dll


BIN
bin/Debug/net8.0/System.Security.Cryptography.ProtectedData.dll


BIN
bin/Debug/net8.0/System.Security.Permissions.dll


BIN
bin/Debug/net8.0/System.Text.Encodings.Web.dll


BIN
bin/Debug/net8.0/System.Text.Json.dll


BIN
bin/Debug/net8.0/System.Windows.Extensions.dll


+ 8 - 0
bin/Debug/net8.0/appsettings.Development.json

@@ -0,0 +1,8 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  }
+}

+ 12 - 0
bin/Debug/net8.0/appsettings.json

@@ -0,0 +1,12 @@
+{
+    "Logging": {
+        "LogLevel": {
+            "Default": "Information",
+            "Microsoft.AspNetCore": "Warning"
+        }
+    },
+    "AllowedHosts": "*",
+    "ConnectionStrings": {
+        "DefaultConnection": "Server=192.168.0.110;Database=goods;User ID=sa;Password=@@20120726KKh;Encrypt=False;"
+    }
+}

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません