2017-05-31 9 views
0

[Edit: die ursprünglichen Code-Schnipsel waren nicht korrekt.]C# Hilfe meiner benutzerdefinierten Validierung Fehlermeldung von Immobilien verziert mit RequiredAttribute finden

[Dieser Beitrag die spezifische Frage zu helfen, ist intented zu beantworten Ich hatte das fand ich eine große Antwort auf. Ich verlinke auf meinen Beispielbeitrag, dem ich gefolgt bin, und dann auf den Beitrag, der mir die Antwort gegeben hat. Dann poste ich den Code, den ich erfolgreich verwendet habe, um die Ergebnisse zu erzielen, die ich erreicht habe.]

Ich implementierte eine einfache Technik für die Validierung in meiner Eingabe in einen ApiController. Der folgende Code war funktional, aber wie Sie sehen können, wurde nur eine allgemeine Fehlermeldung angezeigt.

Die Antwort, die ich fand mich auf diese Technik führen hier gefunden wird: https://stackoverflow.com/a/19322688/7637275

Das folgende ist mein Code, den ich mit begann -

using System.Web.Http; 
using System.Web.Routing; 
using System.Web.Http.Controllers; 
using System.Web; 
using System.Web.Http.Filters; 

namespace TestValidation 
{ 
    internal class ValidateModelStateFilterAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(HttpActionContext actionContext) 
     { 
      if (!actionContext.ModelState.IsValid) 
      { 
       throw new HttpException(422, "Validation failed on input"); 
      } 
     } 
    } 
} 

Der folgende Ausschnitt zeigt die Fehlervalidierung ich gebraucht siehe, anstelle der generischen Nachricht, die oben erwähnt wurde.

[Required(ErrorMessage = @"Parameter ""ID"" is required.")] 
[MaxLength(18, ErrorMessage = @"Exceeded max length (18 characters) for parameter ""ID""")] 
public string ID { get; set; } 

An diesem Punkt in meinem überschreiben, muss ich in die HttpActionContent Objekt „Action“ graben die benutzerdefinierten Fehlermeldungen zu finden.

Antwort

0

[Edit:. Die ursprünglichen Code-Schnipsel waren nicht korrekt]

fand ich eine große Antwort geschrieben, die ich meine Frage zu lösen geholfen! Der folgende Link führt Sie zu dieser Antwort: https://stackoverflow.com/a/33009722/7637275

Hier ist der resultierende Code, den ich verwendet habe, um die benutzerdefinierten Validierungsnachrichten von meinem Webdienst bereitzustellen. Ich habe drei kleine Anpassungen vorgenommen. Ich entschied mich, einen Try/Catch-Block zu implementieren, der einfach die generische Fehlermeldung liefert, wenn der Code fehlschlägt. Ich habe eine Liste anstelle einer Var (Codierungsstil) verwendet. Ich benutzte auch ein Semikolon anstelle einer neuen Zeile, um die Fehler zu verbinden (das passt zu meiner Anforderung).

Ein riesiges Dankeschön an beide Poster im stackoverflow, die mir dabei geholfen haben, dem auf den Grund zu gehen!

using System.Web.Http; 
using System.Web.Routing; 
using System.Web.Http.Controllers; 
using System.Web; 
using System.Web.Http.Filters; 
using System.Linq; 
using System.Collections.Generic; 


namespace TestValidation 
{ 
    internal class ValidateModelStateFilterAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(HttpActionContext actionContext) 
     { 
      if (!actionContext.ModelState.IsValid) 
      { 
       string errorMessage = string.Empty; 

       List<string> errors = new List<string>(); 

       try 
       { 
        errors = actionContext.ModelState.Values.SelectMany(val => val.Errors.Select(err => err.ErrorMessage)).ToList(); 

        errorMessage = string.Join(";", errors); 
       } 
       catch     { 
        errorMessage = "Validation failed on input"; 
       } 

       throw new HttpException(422, errorMessage); 
      } 
     } 
    } 
} 
Verwandte Themen