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();
}