순환 참조 asp.net core mvc [HttpPost ( "add-recipe")] 웹 API를 피하는 방법

HazarV17

내 프로젝트는 레시피 (요리) .NET Core 5.0이있는 애플리케이션입니다.

그리고 새 레시피 (HttpPost) 웹 API를 추가하는 데 문제가 있습니다.

우편 배달부에서 내 응답은 다음과 같습니다.

"가능한 개체주기가 감지되었습니다. 이는주기 때문이거나 개체 깊이가 최대 허용 깊이 인 32보다 큰 경우 일 수 있습니다.주기를 지원하려면 JsonSerializerOptions에서 ReferenceHandler.Preserve를 사용하는 것이 좋습니다."

새 레시피를 만들 때 모든 속성 (순환 참조)을 포함하는 Recipe 대신 recipeToCreateDto를 사용해야합니다.

제대로 작동하도록 도와주세요. 매핑 방법 등

https://i.postimg.cc/Mphv7zRH/screen.png <-여기 화면

클래스 및 리포지토리 패턴 매핑에 AutoMapper를 사용하고 있습니다.

public class AppUser
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public ICollection<Recipe> Recipes {get; set;} 
    }
}

사용자는 많은 레시피를 가지고 있습니다.

 public class Recipe
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public AppUser AppUser { get; set; }
        public int AppUserId { get; set; }
    }

데이터 전송 개체

public class RecipeForCreateDto
    {
        [Required]
        [StringLength(50, MinimumLength = 3, ErrorMessage = "You must specify name between 3 and 50 characters")]
        public string Name { get; set; }
        public int AppUserId { get; set; }
        public int AuthorId { get; set; }
    }

내 AutoMapperProfiles.cs에서

public class AutoMapperProfiles : Profile
    {
        public AutoMapperProfiles()
        {
        CreateMap<RecipeForCreateDto, Recipe>();
        }

레시피 인터페이스

  public interface IRecipeRepository
    {
      Task<Recipe> AddNewRecipe(Recipe recipe);
    }

    public class RecipeRepository : IRecipeRepository
    {
        private readonly DataContext _context;
        private readonly IMapper _autoMapper;
        public RecipeRepository(DataContext context, IMapper autoMapper)
        {
            _autoMapper = autoMapper;
            _context = context;
        }

 public async Task<Recipe> AddNewRecipe(Recipe recipe)
        {
            await _context.Recipes.AddAsync(recipe);
            await _context.SaveChangesAsync();

            return recipe;
        }

}

사용자 컨트롤러 :

User.GetUsername ()은 사용자의 사용자 이름을 가져 오는 정적 메서드입니다.

[HttpPost("add-recipe")]
        public async Task<ActionResult> AddNewRecipe(RecipeForCreateDto recipeForCreateDto)
        {
            var userFromRepo = await _userRepository.GetUserByUsernameAsync(User.GetUsername());

            recipeForCreateDto.Name = recipeForCreateDto.Name.ToLower();

            if (await _recipeRepository.RecipeExists(recipeForCreateDto.Name))
                return BadRequest("Recipe with that name already exists!");

            var recipeToCreate = _autoMapper.Map<Recipe>(recipeForCreateDto);

            recipeToCreate.AppUserId = userFromRepo.Id;


            var createdRecipe = await _recipeRepository.AddNewRecipe(recipeToCreate); // here is problem 

            var recipeToReturn = _autoMapper.Map<RecipeForDetailDto>(createdRecipe);


            return CreatedAtRoute("GetRecipe", new { controller = "Recipes", id = createdRecipe.Id }, recipeToReturn);
        }
유용 칭

"가능한 개체주기가 감지되었습니다. 이는주기 때문이거나 개체 깊이가 최대 허용 깊이 인 32보다 큰 경우 일 수 있습니다.주기를 지원하려면 JsonSerializerOptions에서 ReferenceHandler.Preserve를 사용하는 것이 좋습니다."

이 문제의 경우 startup.cs ConfigureServices메서드에 다음 코드를 추가 할 수 있습니다 .

services.AddControllersWithViews()
    .AddNewtonsoftJson(options =>
    options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ASP.NET Core 참조를 확인하는 방법 및 위치

분류에서Dev

내 ASP.NET Core 2.2 웹 API를 테스트하는 방법 Ok (object)를 반환하는 IActionResult GET?

분류에서Dev

Web API에서 ASP.NET Core Web MVC를 호출하는 방법

분류에서Dev

asp.net 웹 사이트에 "서비스 참조"를 추가하는 방법은 무엇입니까?

분류에서Dev

ASP.NET MVC는 httpPost 후 인덱스보기를 반환합니다.

분류에서Dev

게시 할 때 404 오류를 반환하는 Blazor ASP.Net Core 3.1 웹 API

분류에서Dev

웹 API를 호출하는 ASP .Net Core 웹 앱

분류에서Dev

여러 매개 변수를 검색하기 위해 ASP .NET MVC4 웹 API를 만드는 방법

분류에서Dev

ASP.NET MVC 프로젝트 참조를 사용하여 콘솔 응용 프로그램에서 ASP.NET MVC의 MYSQL DbContext를 사용하는 방법

분류에서Dev

ASP.NET Core 3.1에서 실행되는 OData 지원 웹 API에 Swagger를 추가하는 방법

분류에서Dev

ASP.NET Core의 웹 서비스를 IIS에 게시하는 방법

분류에서Dev

.Net Core에서 프로젝트를 참조하는 방법

분류에서Dev

기본 키 열을 참조하지 않는 외래 키를 참조하는 방법. 먼저 Asp.net mvc 코드?

분류에서Dev

asp.net MVC 웹 사이트에 Bing Cognitive Web Search API를 통합하는 방법

분류에서Dev

Powershell없이 Windows 10 IoT Core에서 Asp.Net 5 웹 API를 호스팅하는 방법

분류에서Dev

컨트롤러 코드에서 웹 URL을 호출하는 방법 asp.net mvc Core

분류에서Dev

ReactJS 및 MVC 웹 사이트를 나란히 실행하도록 ASP.NET Core 3.1 애플리케이션을 구성하는 방법

분류에서Dev

ASP.net 웹 API에서 customexceptionhandlers를 사용하는 방법

분류에서Dev

Asp.net Core MVC Razor를 통해 '필수'속성을 설정하는 방법

분류에서Dev

Angular 2 및 ASP.NET Core MVC에 대한 공유 환경 변수를 갖는 방법

분류에서Dev

ASP.net MVC 웹 API + Android

분류에서Dev

Caliburn.Micro에서 순환 참조를 해결하는 방법

분류에서Dev

Laravel 5.1 / PHP 웹 사이트를 ASP.NET으로 변환하는 방법

분류에서Dev

asp.net MVC5에서 API를 호출하는 방법

분류에서Dev

Asp.Net 웹 API-모든 레코드를 얻는 방법

분류에서Dev

ASP.NET MVC / 웹 컨트롤러에서 JSON을 반환하는 방법은 무엇입니까?

분류에서Dev

asp.net MVC4에서 웹 API URL에 대한 일반적인 방법을 만드는 방법

분류에서Dev

.NET Core 리플렉션-ASP.NET Core 3 Razor보기 내에서 속성의 참조를 찾는 방법은 무엇입니까?

분류에서Dev

asp.net mvc 및 웹 API에 대해 동일한 인증 메커니즘을 구현하는 방법

Related 관련 기사

  1. 1

    ASP.NET Core 참조를 확인하는 방법 및 위치

  2. 2

    내 ASP.NET Core 2.2 웹 API를 테스트하는 방법 Ok (object)를 반환하는 IActionResult GET?

  3. 3

    Web API에서 ASP.NET Core Web MVC를 호출하는 방법

  4. 4

    asp.net 웹 사이트에 "서비스 참조"를 추가하는 방법은 무엇입니까?

  5. 5

    ASP.NET MVC는 httpPost 후 인덱스보기를 반환합니다.

  6. 6

    게시 할 때 404 오류를 반환하는 Blazor ASP.Net Core 3.1 웹 API

  7. 7

    웹 API를 호출하는 ASP .Net Core 웹 앱

  8. 8

    여러 매개 변수를 검색하기 위해 ASP .NET MVC4 웹 API를 만드는 방법

  9. 9

    ASP.NET MVC 프로젝트 참조를 사용하여 콘솔 응용 프로그램에서 ASP.NET MVC의 MYSQL DbContext를 사용하는 방법

  10. 10

    ASP.NET Core 3.1에서 실행되는 OData 지원 웹 API에 Swagger를 추가하는 방법

  11. 11

    ASP.NET Core의 웹 서비스를 IIS에 게시하는 방법

  12. 12

    .Net Core에서 프로젝트를 참조하는 방법

  13. 13

    기본 키 열을 참조하지 않는 외래 키를 참조하는 방법. 먼저 Asp.net mvc 코드?

  14. 14

    asp.net MVC 웹 사이트에 Bing Cognitive Web Search API를 통합하는 방법

  15. 15

    Powershell없이 Windows 10 IoT Core에서 Asp.Net 5 웹 API를 호스팅하는 방법

  16. 16

    컨트롤러 코드에서 웹 URL을 호출하는 방법 asp.net mvc Core

  17. 17

    ReactJS 및 MVC 웹 사이트를 나란히 실행하도록 ASP.NET Core 3.1 애플리케이션을 구성하는 방법

  18. 18

    ASP.net 웹 API에서 customexceptionhandlers를 사용하는 방법

  19. 19

    Asp.net Core MVC Razor를 통해 '필수'속성을 설정하는 방법

  20. 20

    Angular 2 및 ASP.NET Core MVC에 대한 공유 환경 변수를 갖는 방법

  21. 21

    ASP.net MVC 웹 API + Android

  22. 22

    Caliburn.Micro에서 순환 참조를 해결하는 방법

  23. 23

    Laravel 5.1 / PHP 웹 사이트를 ASP.NET으로 변환하는 방법

  24. 24

    asp.net MVC5에서 API를 호출하는 방법

  25. 25

    Asp.Net 웹 API-모든 레코드를 얻는 방법

  26. 26

    ASP.NET MVC / 웹 컨트롤러에서 JSON을 반환하는 방법은 무엇입니까?

  27. 27

    asp.net MVC4에서 웹 API URL에 대한 일반적인 방법을 만드는 방법

  28. 28

    .NET Core 리플렉션-ASP.NET Core 3 Razor보기 내에서 속성의 참조를 찾는 방법은 무엇입니까?

  29. 29

    asp.net mvc 및 웹 API에 대해 동일한 인증 메커니즘을 구현하는 방법

뜨겁다태그

보관