2017-12-10 3 views
0

Ich gewöhne mich an die Verwendung von AspNetCore 2.0.500 nicht gefunden Fehler beim Aufruf der Web-API

Ich habe einen WPF-Client und ruft meinen Web-API-Controller auf.

Zuerst ist dies meine Web API (unter Core 2.0).

[Route("api/[controller]")] 
public class EmailRecordController : Controller 
{ 
    [HttpPost] 
    [Route("ValidateEmail")] 
    public EmailRecord ValidateEmail([FromBody] EmailRecord emailRecord) 
    { 
     return _externalApiEmailService.Search(emailRecord.email); 
    } 
} 

Ich nenne es von meinem WPF-Client:

var uriController = "api/EmailRecord/ValidateEmail"; 

public async Task<EmailRecord> SearchEmail(
    string emailAddress, string uriController) 
{ 
    //var uri = "http://localhost:49627//api/Email/Search"; 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:49627/"); 
     var emailRecord = new EmailRecord {email = emailAddress}; 
     var jsonInput = JsonConvert.SerializeObject(emailRecord); 
     var contentPost = new StringContent(jsonInput, Encoding.UTF8, "application/json"); 
     var response = await client.PostAsync(uriController, contentPost).ConfigureAwait(false); 
     response.EnsureSuccessStatusCode(); 
     var json = await response.Content.ReadAsStringAsync(); 
     return JsonConvert.DeserializeObject<EmailRecord>(json); 
    } 
} 

My Model auf meinem Client ist:

public class EmailRecord 
{ 
    public string CompanyRef { get; set; } 
    public string ClientRef { get; set; } 
    public string email { get; set; } 
    public string did_you_mean { get; set; } 
    public string user { get; set; } 
    public string domain { get; set; } 
    public string format_valid { get; set; } 
    public string mx_found { get; set; } 
    public string smtp_check { get; set; } 
    public string catch_all { get; set; } 
    public string role { get; set; } 
    public string disposable { get; set; } 
    public string free { get; set; } 
    public string score { get; set; } 
} 

Mein Modell auf meinem asp.net.core Server ist:

public class EmailRecord 
{ 
    public string CompanyRef { get; set; } 
    public string ClientRef { get; set; } 
    public string email { get; set; } 
    public string did_you_mean { get; set; } 
    public string user { get; set; } 
    public string domain { get; set; } 
    public string format_valid { get; set; } 
    public string mx_found { get; set; } 
    public string smtp_check { get; set; } 
    public string catch_all { get; set; } 
    public string role { get; set; } 
    public string disposable { get; set; } 
    public string free { get; set; } 
    public string score { get; set; } 
} 

Wenn es aufgerufen wird, bekomme ich das:

  • Antwort {Statuscode 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Inhalt: System.Net.Http.StreamContent, Sockel: { X-Quelldateien:? = UTF-8 B ? RDpcREVWLUluZm9ybWVkV29ya2VyXEluZm9ybWVkV29ya2VyXEluZm9ybWVkV29ya2VyXEluZm9ybWVkV29ya2VyXGFwaVxFbWFpbFJlY29yZFxWYWxpZGF0ZUVtYWls = Date: Sun, 10. Dezember 2017 19.58.02 GMT Server: Kestrel X-Powered-By: ASP.NET Content-Length: 0 }} System.Net.Http.HttpResponseMessage

Ich habe eine ähnliche API (nur mit einem anderen Modell/Funktion) und das funktioniert Ok und ich habe das als Vorlage für alle anderen verwendet.

Kann einfach nicht sehen, warum dies ein Fehler ist?

Zusätzlich:

Screenshot Fehler

enter image description here

+0

Es sollte einige zusätzliche Informationen in der Fehlerreaktion geben, Sie haben nicht genug Informationen gegeben, damit wir es beheben können. Sind Sie sicher, dass '_externalApiEmailService.Search' funktioniert? – DavidG

+0

Ich werde es noch einmal laufen lassen und eine weitere Quickwatch machen.Dieser Metode Ich habe einen Haltepunkt gesetzt, bevor es irgendeine Sache läuft, aber ich werde es bekommen, um eine Null zurückzugeben, nur für den Fall, dass der Debugger Break-Point nicht funktioniert - obwohl es auf meiner anderen api –

Antwort

2

Ein 500-Antwortstatuscode bedeutet normalerweise, dass eine Ausnahme ausgelöst wurde (und nicht behandelt werden) während der Verarbeitung der Anforderung - das alles von einem sein könnte NullReferenceException zu einem Fehler bei der Verbindung mit einer Datenbank.

Um herauszufinden, was das Problem ist, müssen Sie die Ausnahme erfassen. Ich empfehle, für einige Zeiger Introduction to Error Handling in ASP.NET Core zu lesen, der einfachste Weg wird wahrscheinlich sein, die Entwicklerausnahmeseite (oberster Abschnitt in diesem Link) zu verwenden.

+0

Danke das sieht ein sehr guter Link, ich soll mich erziehen. Ich werde DavidG antworten und in Kürze antworten. –

2

Neben @Justin ‚s Antwort, fand ich ein falsches Routing-Attribut in Ihrem Code:

[Route("api/[controller]")] 
public class EmailRecordController : Controller 
{ 
    // you should add the Part-route-template here: 
    [HttpPost("ValidateEmail")] 
    // If you leave this, your path is localhost:port/validateemail [Route("ValidateEmail")] 
    public EmailRecord ValidateEmail([FromBody] EmailRecord emailRecord) 
    { 
     return _externalApiEmailService.Search(emailRecord.email); 
    } 
} 
+0

Danke. Ich habe das in, aber immer noch den gleichen Fehler –

1

@People. Der Grund dafür war, dass mein API-Controller-Konstruktor akzeptiert und eine Schnittstelle war, aber ich habe es nicht über meine StartUp.cs eingegeben. Also, um meine Schande in solch einem Fall zu illustrieren, werde ich diese Frage für die Leute offen lassen.

+0

Ein upvote für Ihre Wahrhaftigkeit. ;-) – Nikolaus

Verwandte Themen