Parameter binding for API requests

This commit is contained in:
Bogdan 2024-04-29 01:19:25 +03:00
parent 3b5078d117
commit c0b354039d
24 changed files with 53 additions and 35 deletions

View File

@ -51,7 +51,7 @@ namespace Radarr.Api.V3.AutoTagging
[RestPostById] [RestPostById]
[Consumes("application/json")] [Consumes("application/json")]
public ActionResult<AutoTaggingResource> Create(AutoTaggingResource autoTagResource) public ActionResult<AutoTaggingResource> Create([FromBody] AutoTaggingResource autoTagResource)
{ {
var model = autoTagResource.ToModel(_specifications); var model = autoTagResource.ToModel(_specifications);
@ -62,7 +62,7 @@ namespace Radarr.Api.V3.AutoTagging
[RestPutById] [RestPutById]
[Consumes("application/json")] [Consumes("application/json")]
public ActionResult<AutoTaggingResource> Update(AutoTaggingResource resource) public ActionResult<AutoTaggingResource> Update([FromBody] AutoTaggingResource resource)
{ {
var model = resource.ToModel(_specifications); var model = resource.ToModel(_specifications);

View File

@ -84,7 +84,8 @@ namespace Radarr.Api.V3.Collections
} }
[RestPutById] [RestPutById]
public ActionResult<CollectionResource> UpdateCollection(CollectionResource collectionResource) [Consumes("application/json")]
public ActionResult<CollectionResource> UpdateCollection([FromBody] CollectionResource collectionResource)
{ {
var collection = _collectionService.GetCollection(collectionResource.Id); var collection = _collectionService.GetCollection(collectionResource.Id);
@ -96,7 +97,8 @@ namespace Radarr.Api.V3.Collections
} }
[HttpPut] [HttpPut]
public ActionResult UpdateCollections(CollectionUpdateResource resource) [Consumes("application/json")]
public ActionResult UpdateCollections([FromBody] CollectionUpdateResource resource)
{ {
var collectionsToUpdate = _collectionService.GetCollections(resource.CollectionIds).ToList(); var collectionsToUpdate = _collectionService.GetCollections(resource.CollectionIds).ToList();

View File

@ -49,7 +49,9 @@ namespace Radarr.Api.V3.Commands
} }
[RestPostById] [RestPostById]
public ActionResult<CommandResource> StartCommand(CommandResource commandResource) [Consumes("application/json")]
[Produces("application/json")]
public ActionResult<CommandResource> StartCommand([FromBody] CommandResource commandResource)
{ {
var commandType = var commandType =
_knownTypes.GetImplementations(typeof(Command)) _knownTypes.GetImplementations(typeof(Command))

View File

@ -34,7 +34,7 @@ namespace Radarr.Api.V3.Config
[RestPutById] [RestPutById]
[Consumes("application/json")] [Consumes("application/json")]
public virtual ActionResult<TResource> SaveConfig(TResource resource) public virtual ActionResult<TResource> SaveConfig([FromBody] TResource resource)
{ {
var dictionary = resource.GetType() var dictionary = resource.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public) .GetProperties(BindingFlags.Instance | BindingFlags.Public)

View File

@ -122,7 +122,7 @@ namespace Radarr.Api.V3.Config
} }
[RestPutById] [RestPutById]
public ActionResult<HostConfigResource> SaveHostConfig(HostConfigResource resource) public ActionResult<HostConfigResource> SaveHostConfig([FromBody] HostConfigResource resource)
{ {
var dictionary = resource.GetType() var dictionary = resource.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public) .GetProperties(BindingFlags.Instance | BindingFlags.Public)

View File

@ -48,7 +48,7 @@ namespace Radarr.Api.V3.Config
} }
[RestPutById] [RestPutById]
public ActionResult<NamingConfigResource> UpdateNamingConfig(NamingConfigResource resource) public ActionResult<NamingConfigResource> UpdateNamingConfig([FromBody] NamingConfigResource resource)
{ {
var nameSpec = resource.ToModel(); var nameSpec = resource.ToModel();
ValidateFormatResult(nameSpec); ValidateFormatResult(nameSpec);

View File

@ -33,7 +33,7 @@ namespace Radarr.Api.V3.Config
} }
[RestPutById] [RestPutById]
public override ActionResult<UiConfigResource> SaveConfig(UiConfigResource resource) public override ActionResult<UiConfigResource> SaveConfig([FromBody] UiConfigResource resource)
{ {
var dictionary = resource.GetType() var dictionary = resource.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public) .GetProperties(BindingFlags.Instance | BindingFlags.Public)

View File

@ -29,7 +29,8 @@ namespace Radarr.Api.V3.CustomFilters
} }
[RestPostById] [RestPostById]
public ActionResult<CustomFilterResource> AddCustomFilter(CustomFilterResource resource) [Consumes("application/json")]
public ActionResult<CustomFilterResource> AddCustomFilter([FromBody] CustomFilterResource resource)
{ {
var customFilter = _customFilterService.Add(resource.ToModel()); var customFilter = _customFilterService.Add(resource.ToModel());
@ -37,7 +38,8 @@ namespace Radarr.Api.V3.CustomFilters
} }
[RestPutById] [RestPutById]
public ActionResult<CustomFilterResource> UpdateCustomFilter(CustomFilterResource resource) [Consumes("application/json")]
public ActionResult<CustomFilterResource> UpdateCustomFilter([FromBody] CustomFilterResource resource)
{ {
_customFilterService.Update(resource.ToModel()); _customFilterService.Update(resource.ToModel());
return Accepted(resource.Id); return Accepted(resource.Id);

View File

@ -48,7 +48,7 @@ namespace Radarr.Api.V3.CustomFormats
[RestPostById] [RestPostById]
[Consumes("application/json")] [Consumes("application/json")]
public ActionResult<CustomFormatResource> Create(CustomFormatResource customFormatResource) public ActionResult<CustomFormatResource> Create([FromBody] CustomFormatResource customFormatResource)
{ {
var model = customFormatResource.ToModel(_specifications); var model = customFormatResource.ToModel(_specifications);
@ -59,7 +59,7 @@ namespace Radarr.Api.V3.CustomFormats
[RestPutById] [RestPutById]
[Consumes("application/json")] [Consumes("application/json")]
public ActionResult<CustomFormatResource> Update(CustomFormatResource resource) public ActionResult<CustomFormatResource> Update([FromBody] CustomFormatResource resource)
{ {
var model = resource.ToModel(_specifications); var model = resource.ToModel(_specifications);

View File

@ -34,14 +34,16 @@ namespace Radarr.Api.V3.ImportLists
} }
[RestPutById] [RestPutById]
public ActionResult<ImportExclusionsResource> UpdateExclusion(ImportExclusionsResource exclusionResource) [Consumes("application/json")]
public ActionResult<ImportExclusionsResource> UpdateExclusion([FromBody] ImportExclusionsResource exclusionResource)
{ {
var model = exclusionResource.ToModel(); var model = exclusionResource.ToModel();
return Accepted(_exclusionService.Update(model)); return Accepted(_exclusionService.Update(model));
} }
[RestPostById] [RestPostById]
public ActionResult<ImportExclusionsResource> AddExclusion(ImportExclusionsResource exclusionResource) [Consumes("application/json")]
public ActionResult<ImportExclusionsResource> AddExclusion([FromBody] ImportExclusionsResource exclusionResource)
{ {
var model = exclusionResource.ToModel(); var model = exclusionResource.ToModel();

View File

@ -61,7 +61,7 @@ namespace Radarr.Api.V3.Indexers
[HttpPost] [HttpPost]
[Consumes("application/json")] [Consumes("application/json")]
public async Task<object> DownloadRelease(ReleaseResource release) public async Task<object> DownloadRelease([FromBody] ReleaseResource release)
{ {
var remoteMovie = _remoteMovieCache.Find(GetCacheKey(release)); var remoteMovie = _remoteMovieCache.Find(GetCacheKey(release));

View File

@ -49,7 +49,7 @@ namespace Radarr.Api.V3.Indexers
[HttpPost] [HttpPost]
[Consumes("application/json")] [Consumes("application/json")]
public ActionResult<List<ReleaseResource>> Create(ReleaseResource release) public ActionResult<List<ReleaseResource>> Create([FromBody] ReleaseResource release)
{ {
_logger.Info("Release pushed: {0} - {1}", release.Title, release.DownloadUrl ?? release.MagnetUrl); _logger.Info("Release pushed: {0} - {1}", release.Title, release.DownloadUrl ?? release.MagnetUrl);

View File

@ -82,7 +82,7 @@ namespace Radarr.Api.V3.MovieFiles
[RestPutById] [RestPutById]
[Consumes("application/json")] [Consumes("application/json")]
public ActionResult<MovieFileResource> SetMovieFile(MovieFileResource movieFileResource) public ActionResult<MovieFileResource> SetMovieFile([FromBody] MovieFileResource movieFileResource)
{ {
var movieFile = _mediaFileService.GetMovie(movieFileResource.Id); var movieFile = _mediaFileService.GetMovie(movieFileResource.Id);
movieFile.IndexerFlags = (IndexerFlags)movieFileResource.IndexerFlags; movieFile.IndexerFlags = (IndexerFlags)movieFileResource.IndexerFlags;

View File

@ -235,7 +235,8 @@ namespace Radarr.Api.V3.Movies
} }
[RestPostById] [RestPostById]
public ActionResult<MovieResource> AddMovie(MovieResource moviesResource) [Consumes("application/json")]
public ActionResult<MovieResource> AddMovie([FromBody] MovieResource moviesResource)
{ {
var movie = _addMovieService.AddMovie(moviesResource.ToModel()); var movie = _addMovieService.AddMovie(moviesResource.ToModel());
@ -243,7 +244,8 @@ namespace Radarr.Api.V3.Movies
} }
[RestPutById] [RestPutById]
public ActionResult<MovieResource> UpdateMovie(MovieResource moviesResource, bool moveFiles = false) [Consumes("application/json")]
public ActionResult<MovieResource> UpdateMovie([FromBody] MovieResource moviesResource, [FromQuery] bool moveFiles = false)
{ {
var movie = _moviesService.GetMovie(moviesResource.Id); var movie = _moviesService.GetMovie(moviesResource.Id);

View File

@ -34,7 +34,8 @@ namespace Radarr.Api.V3.Profiles.Delay
} }
[RestPostById] [RestPostById]
public ActionResult<DelayProfileResource> Create(DelayProfileResource resource) [Consumes("application/json")]
public ActionResult<DelayProfileResource> Create([FromBody] DelayProfileResource resource)
{ {
var model = resource.ToModel(); var model = resource.ToModel();
model = _delayProfileService.Add(model); model = _delayProfileService.Add(model);
@ -54,7 +55,8 @@ namespace Radarr.Api.V3.Profiles.Delay
} }
[RestPutById] [RestPutById]
public ActionResult<DelayProfileResource> Update(DelayProfileResource resource) [Consumes("application/json")]
public ActionResult<DelayProfileResource> Update([FromBody] DelayProfileResource resource)
{ {
var model = resource.ToModel(); var model = resource.ToModel();
_delayProfileService.Update(model); _delayProfileService.Update(model);

View File

@ -47,7 +47,8 @@ namespace Radarr.Api.V3.Profiles.Quality
} }
[RestPostById] [RestPostById]
public ActionResult<QualityProfileResource> Create(QualityProfileResource resource) [Consumes("application/json")]
public ActionResult<QualityProfileResource> Create([FromBody] QualityProfileResource resource)
{ {
var model = resource.ToModel(); var model = resource.ToModel();
model = _qualityProfileService.Add(model); model = _qualityProfileService.Add(model);
@ -61,7 +62,8 @@ namespace Radarr.Api.V3.Profiles.Quality
} }
[RestPutById] [RestPutById]
public ActionResult<QualityProfileResource> Update(QualityProfileResource resource) [Consumes("application/json")]
public ActionResult<QualityProfileResource> Update([FromBody] QualityProfileResource resource)
{ {
var model = resource.ToModel(); var model = resource.ToModel();

View File

@ -36,7 +36,7 @@ namespace Radarr.Api.V3.Profiles.Release
} }
[RestPostById] [RestPostById]
public ActionResult<ReleaseProfileResource> Create(ReleaseProfileResource resource) public ActionResult<ReleaseProfileResource> Create([FromBody] ReleaseProfileResource resource)
{ {
var model = resource.ToModel(); var model = resource.ToModel();
model = _profileService.Add(model); model = _profileService.Add(model);
@ -50,7 +50,7 @@ namespace Radarr.Api.V3.Profiles.Release
} }
[RestPutById] [RestPutById]
public ActionResult<ReleaseProfileResource> Update(ReleaseProfileResource resource) public ActionResult<ReleaseProfileResource> Update([FromBody] ReleaseProfileResource resource)
{ {
var model = resource.ToModel(); var model = resource.ToModel();

View File

@ -245,7 +245,7 @@ namespace Radarr.Api.V3
[HttpPost("action/{name}")] [HttpPost("action/{name}")]
[Consumes("application/json")] [Consumes("application/json")]
[Produces("application/json")] [Produces("application/json")]
public IActionResult RequestAction(string name, [FromBody] TProviderResource providerResource) public IActionResult RequestAction([FromRoute] string name, [FromBody] TProviderResource providerResource)
{ {
var existingDefinition = providerResource.Id > 0 ? _providerFactory.Find(providerResource.Id) : null; var existingDefinition = providerResource.Id > 0 ? _providerFactory.Find(providerResource.Id) : null;
var providerDefinition = GetDefinition(providerResource, existingDefinition, false, false, false); var providerDefinition = GetDefinition(providerResource, existingDefinition, false, false, false);

View File

@ -23,7 +23,7 @@ namespace Radarr.Api.V3.Qualities
} }
[RestPutById] [RestPutById]
public ActionResult<QualityDefinitionResource> Update(QualityDefinitionResource resource) public ActionResult<QualityDefinitionResource> Update([FromBody] QualityDefinitionResource resource)
{ {
var model = resource.ToModel(); var model = resource.ToModel();
_qualityDefinitionService.Update(model); _qualityDefinitionService.Update(model);

View File

@ -21,7 +21,7 @@ namespace Radarr.Api.V3.Queue
} }
[HttpPost("grab/{id:int}")] [HttpPost("grab/{id:int}")]
public async Task<object> Grab(int id) public async Task<object> Grab([FromRoute] int id)
{ {
var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id); var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id);

View File

@ -40,7 +40,8 @@ namespace Radarr.Api.V3.RemotePathMappings
} }
[RestPostById] [RestPostById]
public ActionResult<RemotePathMappingResource> CreateMapping(RemotePathMappingResource resource) [Consumes("application/json")]
public ActionResult<RemotePathMappingResource> CreateMapping([FromBody] RemotePathMappingResource resource)
{ {
var model = resource.ToModel(); var model = resource.ToModel();
@ -60,7 +61,7 @@ namespace Radarr.Api.V3.RemotePathMappings
} }
[RestPutById] [RestPutById]
public ActionResult<RemotePathMappingResource> UpdateMapping(RemotePathMappingResource resource) public ActionResult<RemotePathMappingResource> UpdateMapping([FromBody] RemotePathMappingResource resource)
{ {
var mapping = resource.ToModel(); var mapping = resource.ToModel();

View File

@ -49,7 +49,8 @@ namespace Radarr.Api.V3.RootFolders
} }
[RestPostById] [RestPostById]
public ActionResult<RootFolderResource> CreateRootFolder(RootFolderResource rootFolderResource) [Consumes("application/json")]
public ActionResult<RootFolderResource> CreateRootFolder([FromBody] RootFolderResource rootFolderResource)
{ {
var model = rootFolderResource.ToModel(); var model = rootFolderResource.ToModel();

View File

@ -70,7 +70,7 @@ namespace Radarr.Api.V3.System.Backup
} }
[HttpPost("restore/{id:int}")] [HttpPost("restore/{id:int}")]
public object Restore(int id) public object Restore([FromRoute] int id)
{ {
var backup = GetBackup(id); var backup = GetBackup(id);

View File

@ -34,13 +34,15 @@ namespace Radarr.Api.V3.Tags
} }
[RestPostById] [RestPostById]
public ActionResult<TagResource> Create(TagResource resource) [Consumes("application/json")]
public ActionResult<TagResource> Create([FromBody] TagResource resource)
{ {
return Created(_tagService.Add(resource.ToModel()).Id); return Created(_tagService.Add(resource.ToModel()).Id);
} }
[RestPutById] [RestPutById]
public ActionResult<TagResource> Update(TagResource resource) [Consumes("application/json")]
public ActionResult<TagResource> Update([FromBody] TagResource resource)
{ {
_tagService.Update(resource.ToModel()); _tagService.Update(resource.ToModel());
return Accepted(resource.Id); return Accepted(resource.Id);