최소한으로 구성된 웹 API를 Sitecore XM/XP 10.2에 추가하는 방법

15006 단어 aspnetsitecore
외부 사이트에서 Sitecore XM 또는 XP에 저장된 데이터를 사용하려는 경우가 많으며 이 단계별 가이드에서는 Sitecore XM/XP 10.2에서 사용자 지정 웹 API를 추가하는 방법을 설명합니다.

시스템 요구 사항


  • Visual Studio 2019 이상 (저자의 환경은 Visual Studio 2022임)
  • NET 프레임워크 4.8
  • 윈도우 10
  • 사이트코어 XM/XP 10.2

  • 대상 고객


  • 사이트 코어 개발자

  • 준비



    NuGet 패키지 소스에 Sitecore 추가



    Visual Studio 구성을 엽니다.

  • 패키지 소스 선택
  • +
  • 를 클릭하세요.
  • 추가된 패키지 소스 선택
  • 이름에 Sitecore를 입력하고 소스
  • https://sitecore.myget.org/F/sc-packages/api/v3/index.json를 입력합니다.
  • 클릭 Update
  • OK 을 클릭합니다.


  • 그게 다야.

    완전한 저장소



    다음은 완성된 소스이므로 바로 빌드하고 사용해 볼 수 있습니다.
    https://github.com/nnasaki/SimpleWebApi

    새로운 솔루션을 만드는 단계


    새 솔루션 만들기




    ASP.NET Web Application(.NET Framework) 를 선택합니다. ASP.NET Core가 아닙니다.


    프로젝트 이름을 입력합니다. 프레임워크가 .NET Framework 4.8 인지 다시 확인하십시오.


    프로젝트 유형으로 Empty를 선택합니다. 오른쪽에 있는 모든 확인란의 선택을 취소합니다.

    Create를 눌러 새 솔루션 및 프로젝트 생성을 마칩니다.

    NuGet 패키지 추가



    Visual StudioTools에서 Package Manager Console 아래의 Nuget Package Manager를 클릭합니다.


    화면 하단에 Package Manager Console가 나타나면 Install-Package Sitecore.Services.Infrastructure !
    If you see Successfully installed like this, it is successful. It took about 2 minutes in my environment.

    컨트롤러 추가


    Controllers의 폴더 추가 및 클래스 추가

    SimpleWebApiController를 입력하고 추가를 클릭합니다.


    다음 코드를 입력하세요

    using Sitecore.Services.Infrastructure.Web.Http;
    using System.Web.Http;
    using System.Web.Http.Cors;
    
    namespace SimpleWebApi.Controllers
    {
        // TODO Be sure to narrow down the CORS settings in the production environment. This is all allowed.
        [EnableCors(origins: "*", headers: "*", methods: "*")]
        public class SimpleWebApiController : ServicesApiController
        {
            public SimpleWebApiController()
            {
            }
    
            [HttpGet]
            public string Stats()
            {
                return "ok SimpleWebApi";
            }
        }
    }
    


    경로 정의 추가



    컨트롤러와 동일한 절차입니다. Pipelines 폴더를 추가하고 RegisterHttpRoutes 클래스를 추가합니다.

    다음 코드를 입력하세요

    using System.Web.Http;
    using Sitecore.Pipelines;
    
    namespace SimpleWebApi.Pipelines
    {
        public class RegisterHttpRoutes
        {
            public void Process(PipelineArgs args)
            {
                GlobalConfiguration.Configure(Configure);
            }
            protected void Configure(HttpConfiguration configuration)
            {
                var routes = configuration.Routes;
                routes.MapHttpRoute("SimpleWebApi.stats", "api/simplewebapi/stats", new
                {
                    controller = "SimpleWebApi",
                    action = "Stats"
                });
    
            }
        }
    }
    


    구성을 추가합니다.



    계층적 폴더App_Config\Include\ZZZZZ_CustomConfigs를 만들고 SimpleWebApi.config를 추가합니다.


    다음 설정을 입력하십시오

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"
                   xmlns:set="http://www.sitecore.net/xmlconfig/set/"
                   xmlns:role="http://www.sitecore.net/xmlconfig/role/">
      <sitecore>
        <pipelines>
          <initialize>
            <processor
               type="SimpleWebApi.Pipelines.RegisterHttpRoutes, SimpleWebApi" />
          </initialize> 
        </pipelines>
      </sitecore>
    </configuration>
    


    배포



    빌드된 모듈 배포

    bin에 dll 추가



    프로젝트SimpleWebApi.dll에서 생성된 bin를 IIS의 C:\inetpub\wwwroot\sitecoresc.dev.local\bin에 복사합니다. 환경에서 sitecoresc.dev.local 부분을 다시 작성하십시오.
    !

    포함할 구성 추가


    SimpleWebApi.config를 프로젝트에 추가하여 C:\inetpub\wwwroot\sitecoresc.dev.local\App_Config\Include\ZZZZZ_CustomConfigs에 복사합니다.


    작동 확인



    API에 액세스



    브라우저를 사용하여 Sitecore가 배포된 사이트에 액세스합니다.
    이 예에서는 https://sitecoresc.dev.local/api/simplewebapi/stats에 액세스하여 확인합니다.

    배포에 성공하면 아래와 같이 간단한"ok SimpleWebApi"이 표시됩니다.


    오류가 발생하면 문제 해결을 참조하십시오.

    요약



    이 기사에서 보듯이 Sitecore는 쉽게 사용자 정의할 수 있으므로 사용해 보십시오.

    문제 해결



    다음은 시도하는 동안 발생한 오류와 처리 방법에 대한 요약입니다.

    이름이 'MinimumTest4'인 컨트롤러와 일치하는 유형을 찾을 수 없습니다.



    오류 정보.




    {"Message": "No HTTP resource was found that matches the request URI 'https://sitecoresc.dev.local/api/minimumtest4/stats'." , "MessageDetail": "No type was found that matches the controller named 'MinimumTest4'"}
    




    해결책.



    두 가지 패턴이 있습니다.

    1. MapHttpRoute에서 컨트롤러 이름이 잘못 설정되었습니다.



    컨트롤러 이름이 올바른지 확인하십시오. MinimumTest4Controller가 컨트롤러 이름인 경우 MinimumTest4 없이 최대 Controller까지 지정합니다.


    2. optimizeCompilations="true"는 Web.config에서 활성화됩니다.



    Web.config에서 <compilation defaultLanguage="c#" debug="true" targetFramework="4.8" optimizeCompilations="true">를 다음과 같이 설정합니다. If optimizeCompilations is true , set optimizeCompilations="false" .
    optimizeCompilations는 모듈을 업데이트할 때 다시 로드 속도를 높일 수 있는 기능이지만 새 파이프라인 프로세서가 인식되지 않을 수 있습니다. 일반적으로 false 로 설정하는 것이 좋습니다.

    'MinimumTestApi.stats'라는 경로가 이미 경로 컬렉션에 있습니다. 경로 이름은 고유해야 합니다.



    오류 정보.




    Server Error in '/' Application.
    A route named 'MinimumTestApi.stats' is already in the route collection.
    Parameter name: name
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
    
    Exception Details: System.ArgumentException: A route named 'MinimumTestApi.stats' is already in the route collection.
    Parameter name: name
    
    Source Error:
    
    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
    




    해결책


    MapHttpRoute의 정의 이름이 다른 모듈에서 공유됩니다. MapHttpRoute에서 RegisterHttpRoutes.cs의 정의 이름을 변경합니다.


    "'MinimumTestApi'라는 컨트롤러와 일치하는 여러 유형이 발견되었습니다.



    오류 정보.




    {"Message": "An error has occurred.", "ExceptionMessage": "Multiple types were found that match the controller named 'MinimumTestApi'. This can happen if the route that services this request ('api/minimumtest3/stats') found multiple controllers defined with the same name but differing namespaces, which is not supported. \r\n\r\nThe request for 'MinimumTestApi' has found the following matching Controllers:\r\nMinimumTest.Controllers.MinimumTestApiController\r\nMinimumTest.Controllers.MinimumTestApiController", "ExceptionType": "System.InvalidOperationException", "StackTrace":""   at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.SelectController(HttpRequestMessage request)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()"}
    




    해결책.



    다른 모듈과 중복된 컨트롤러 클래스 이름이 있기 때문에 이름 확인이 작동하지 않습니다. 컨트롤러 클래스 이름을 다른 이름으로 변경하십시오.

    좋은 웹페이지 즐겨찾기