2014-02-10 8 views
22

MVC App, Client stellt eine Anfrage an den Server, Fehler tritt auf, möchte die Nachricht an den Client zurücksenden. Versucht HttpStatusCodeResult, aber nur eine 404 ohne Nachricht, ich brauche die Details des Fehlers zurück an den Client gesendet.gibt eine Fehlermeldung mit actionResult zurück

public ActionResult GetPLUAndDeptInfo(string authCode) 
{ 
    try 
    { 
     //code everything works fine 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
     return new HttpStatusCodeResult(404, "Error in cloud - GetPLUInfo" + ex.Message); 
    } 
} 

Antwort

15

Sie benötigen einen Blick zurück, die eine benutzerfreundliche Fehlermeldung an den Benutzer

catch (Exception ex) 
{ 
    // to do :log error 
    return View("Error"); 
} 

Sie hat nicht die internen Details Ihrer Ausnahme zeigen werden (wie Ausnahme Stacktrace usw.) an den Benutzer. Sie sollten die relevanten Informationen in Ihrem Fehlerprotokoll protokollieren, damit Sie das Problem beheben und beheben können.

Wenn Ihre Anfrage eine Ajax-Anforderung ist, können Sie eine JSON-Antwort mit einer korrekten Status-Flag zurück, die Client auswerten können und tun, um weitere Aktionen

[HttpPost] 
public ActionResult Create(CustomerVM model) 
{ 
    try 
    { 
    //save customer 
    return Json(new { status="success",message="customer created"}); 
    } 
    catch(Exception ex) 
    { 
    //to do: log error 
    return Json(new { status="error",message="error creating customer"}); 
    } 
} 

Wenn Sie den Fehler in der Form Benutzer angezeigt werden soll eingereicht Sie können die Methode ModelState.AddModelError zusammen mit den HTML-Hilfsmethoden wie Html.ValidationSummary usw. verwenden, um dem Benutzer den Fehler in der von ihm übermittelten Form anzuzeigen.

19

Ein Ansatz wäre nur zu verwenden, um die ModelState:

ModelState.AddModelError("", "Error in cloud - GetPLUInfo" + ex.Message); 

und dann auf der Ansicht, etwas tun, wie folgt aus:

@Html.ValidationSummary() 

wo wollen Sie die Fehler angezeigt werden soll. Wenn es keine Fehler gibt, wird es nicht angezeigt, aber falls vorhanden, erhalten Sie einen Abschnitt, der alle Fehler auflistet.

4

Ihrer Ansicht einfügen

@Html.ValidationMessage("Error") 

dann in der Steuerung, nachdem Sie in Ihrem Modell neu verwenden

var model = new yourmodel(); 
try{ 
[...] 
}catch(Exception ex){ 
ModelState.AddModelError("Error", ex.Message); 
return View(model); 
} 
4

Innen-Controller Aktion Sie können HttpContext.Response zugreifen. Dort können Sie den Antwortstatus wie in der folgenden Auflistung festlegen.

[HttpPost] 
public ActionResult PostViaAjax() 
{ 
    var body = Request.BinaryRead(Request.TotalBytes); 

    var result = Content(JsonError(new Dictionary<string, string>() 
    { 
     {"err", "Some error!"} 
    }), "application/json; charset=utf-8"); 
    HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; 
    return result; 
} 
+2

Woher haben Sie den JsonError? –

+0

@EhsanZargarErshadi: Ich glaube ich habe es gefunden: https://docs.microsoft.com/en-us/uwp/api/windows.data.json.jsonerror – Matt

+0

Danke für diese Zeile HttpContext.Response.StatusCode = (int) HttpStatusCode .Ungültige Anforderung; –