调用Web API时找不到500错误

时间:2017-12-10 20:04:05

标签: c# asp.net-core-webapi

我习惯使用AspNetCore 2.0。

我有一个WPF客户端,它会调用我的web api控制器。

首先,这是我的Web Api(在核心2.0下)。

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

我从我的WPF客户端调用它:

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);
    }
}

我客户的模型是:

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; }
}

我的asp.net.core服务器上的模型是:

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; }
}

当它被调用时,我得到了这个:

  • response {StatusCode:500,ReasonPhrase:&#39; Internal Server Error&#39;,Version:1.1,Content:System.Net.Http.StreamContent,Headers: { X-SourceFiles:=?UTF-8?B?RDpcREVWLUluZm9ybWVkV29ya2VyXEluZm9ybWVkV29ya2VyXEluZm9ybWVkV29ya2VyXEluZm9ybWVkV29ya2VyXGFwaVxFbWFpbFJlY29yZFxWYWxpZGF0ZUVtYWls?= 日期:太阳,2017年12月10日19:58:02 GMT 服务器:红隼 X-Powered-By:ASP.NET 内容长度:0 System.Net.Http.HttpResponseMessage

我有一个类似的api(只是使用不同的模型/功能),并且工作正常,我已经将其用作所有其他人的模板。

只是看不出为什么这是一个错误?

其他:

错误的屏幕截图

enter image description here

3 个答案:

答案 0 :(得分:2)

500响应状态代码通常表示在处理请求时抛出(并且未处理)异常 - 可能是从NullReferenceException到连接到数据库的错误。

要弄清楚需要捕获异常的问题。我建议阅读Introduction to Error Handling in ASP.NET Core以获取一些指示,最简单的方法可能是使用开发人员异常页面(该链接的顶部)。

答案 1 :(得分:2)

除了@Justin的回答,我在您的代码中发现了错误的路由属性:

[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);
    }
}

答案 2 :(得分:2)

@people。这个错误的原因是我的API控制器构造函数是接受和接口但我没有通过我的StartUp.cs注入它,所以,为了说明我在这么短暂的堕落中的耻辱我将留下这个问题供人们查看它!