0 svar
54 visningar
CsharpStudent behöver inte mer hjälp
CsharpStudent 80
Postad: 7 feb 11:50

Delete och Put Error 500, 403

Hej, jag börjar få panik. Jag har redan lämnat in denna uppgiften som är ett REST API för att recensera filmer som inloggad användare. Jag upptäckte i nya uppgiften frontend som bygger på API:et att min DELETE och min PUT slutat fungera för endast MovieController. Det jag kan utläsa är ju att den är forbidden och eller 500 serverfel.

1.Här är en bild på min förta Delete. Jag insåg dock att review modellen är sammankopplad med movie, vilket gör att jag inte behöver ta bort review, utan den bör tas bort samtidigt som en film tas bort ändå.

2.CustomUser

3.Movie Modell

4.Review Modell

5.MovieController DELETE

Jag har satt breakpoints, googlat felet, testat andra koder i delete, ändrat i modellen men blir inte klok på nått.

using Microsoft.AspNetCore.Identity;

namespace MovieRating.Models
{
    public class CustomUser: IdentityUser
    {
        public ICollection<Movie> Movies { get; set; } = new List<Movie>();

        public ICollection<Review> Reviews { get; set; } = new List<Review>();

    }
}
using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;

namespace MovieRating.Models
{
    public class Movie
    {
        public int Id { get; set; }

        [Required]
        public string Title { get; set; }

        public int ReleaseYear { get; set; }

        public string UserId { get; set; }

        [JsonIgnore]
        public ICollection<Review> Reviews { get; set; } = new List<Review>();
    }
}
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;

namespace MovieRating.Models
{
    public class Review
    {
        public int Id { get; set; }

        [Required]
        [Range(0, 5, ErrorMessage = "Rating must be between 1-5")]
        public int Rating { get; set; }
        [Required]
        public string Comment { get; set; }

        public DateTime Date { get; set; }

        [ForeignKey("MovieId")]
        public int MovieId { get; set; }

        [ValidateNever]
        [JsonIgnore]
        public Movie Movie { get; set; }

        [ForeignKey("UserId")]
        [ValidateNever]
        [JsonIgnore]
        public string UserId { get; set; }

    }
}
// DELETE: api/Movies/5
[HttpDelete("{id}"), Authorize]
public async Task<IActionResult> DeleteMovie(int id)
{
    // Validera indata
    if (id <= 0)
    {
        return BadRequest("Invalid movie ID");
    }

    // Hämta användarens id
    var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

    // Hämta filmen
    var movie = await _context.Movies.FindAsync(id);

    if (movie == null)
    {
        // Returnera 404 om filmen inte hittades
        return NotFound("Movie not found");
    }

    if (movie.UserId != userId)
    {
        // Returnera 403 om användaren inte är ägaren av filmen
        return Forbid("You are not authorized to delete this movie");
    }

    // Ta bort filmen och spara ändringarna
    _context.Movies.Remove(movie);
    await _context.SaveChangesAsync();

    // Returnera 204 No Content om borttagningen är framgångsrik
    return NoContent();
}
Svara
Close