mirror of
https://github.com/aspnet/JavaScriptServices.git
synced 2026-02-07 08:34:07 +00:00
Move from ValidationErrorResult to HttpBadRequest, and support object-level errors too
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
using System.Linq;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Authorization;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
@@ -118,7 +120,7 @@ namespace MusicStore.Apis
|
||||
if (!ModelState.IsValid)
|
||||
{
|
||||
// Return the model errors
|
||||
return new ValidationErrorResult(ModelState);
|
||||
return HttpBadRequest(ModelState);
|
||||
}
|
||||
|
||||
var dbAlbum = await _storeContext.Albums.SingleOrDefaultAsync(a => a.AlbumId == albumId);
|
||||
@@ -165,7 +167,7 @@ namespace MusicStore.Apis
|
||||
}
|
||||
|
||||
[ModelMetadataType(typeof(Album))]
|
||||
public class AlbumChangeDto
|
||||
public class AlbumChangeDto : IValidatableObject
|
||||
{
|
||||
public int GenreId { get; set; }
|
||||
|
||||
@@ -176,6 +178,21 @@ namespace MusicStore.Apis
|
||||
public decimal Price { get; set; }
|
||||
|
||||
public string AlbumArtUrl { get; set; }
|
||||
|
||||
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
||||
{
|
||||
// An example of object-level (i.e., multi-property) validation
|
||||
if (this.GenreId == 13 /* Indie */) {
|
||||
switch (SentimentAnalysis.GetSentiment(Title)) {
|
||||
case SentimentAnalysis.SentimentResult.Positive:
|
||||
yield return new ValidationResult("Sounds too positive. Indie music requires more ambiguity.");
|
||||
break;
|
||||
case SentimentAnalysis.SentimentResult.Negative:
|
||||
yield return new ValidationResult("Sounds too negative. Indie music requires more ambiguity.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class AlbumResultDto : AlbumChangeDto
|
||||
|
||||
38
samples/angular/MusicStore/Apis/Models/SentimentAnalysis.cs
Normal file
38
samples/angular/MusicStore/Apis/Models/SentimentAnalysis.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace MusicStore.Models
|
||||
{
|
||||
// Obviously this is not a serious sentiment analyser. It is only here to provide an amusing demonstration of cross-property
|
||||
// validation in AlbumsApiController.
|
||||
public static class SentimentAnalysis
|
||||
{
|
||||
private static string[] positiveSentimentWords = new[] { "happy", "fun", "joy", "love", "delight", "bunny", "bunnies", "asp.net" };
|
||||
|
||||
private static string[] negativeSentimentWords = new[] { "sad", "pain", "despair", "hate", "scorn", "death", "package management" };
|
||||
|
||||
public static SentimentResult GetSentiment(string text) {
|
||||
var numPositiveWords = CountWordOccurrences(text, positiveSentimentWords);
|
||||
var numNegativeWords = CountWordOccurrences(text, negativeSentimentWords);
|
||||
if (numPositiveWords > numNegativeWords) {
|
||||
return SentimentResult.Positive;
|
||||
} else if (numNegativeWords > numPositiveWords) {
|
||||
return SentimentResult.Negative;
|
||||
} else {
|
||||
return SentimentResult.Neutral;
|
||||
}
|
||||
}
|
||||
|
||||
private static int CountWordOccurrences(string text, string[] words)
|
||||
{
|
||||
// Very simplistic matching technique for this sample. Not scalable and not really even correct.
|
||||
return new Regex(string.Join("|", words), RegexOptions.IgnoreCase).Matches(text).Count;
|
||||
}
|
||||
|
||||
public enum SentimentResult {
|
||||
Negative,
|
||||
Neutral,
|
||||
Positive,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user