在Web API中执行POST请求时出现内部服务器错误500

时间:2018-08-12 23:57:22

标签: c# asp.net asp.net-web-api asp.net-web-api2

我是Web api的新手,正在测试如何使用发布请求。首先,我创建了具有以下属性的名为学生的模型类。

这是我的模特班:

   namespace SelfApi.Models
   {
     public class Student
      {
        public string studentId { get; set; }
        public string firstName { get; set; }
        public string lastName { get; set; }
        public string address { get; set;}
     }
    }

然后在值控制器中,我具有以下代码来实现发布请求。我导入了SelfApi.Models,因此可以访问Student Model类及其属性。在发布请求中,我希望能够发布数据并将其直接映射到Student Model类。

    using System.Net.Http;
    using System.Threading.Tasks;
    using System.Web.Http;
    using SelfApi.Models;

    namespace SelfApi.Controllers
     {

       public class ValuesController : ApiController
        {
          static HttpClient client = new HttpClient();

       // POST api/values
       public async Task PostAsync([FromBody] Student student)
        {
          client.BaseAddress = new Uri("http://localhost:4570/");
          client.DefaultRequestHeaders.Accept.Clear();
          client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = await client.PostAsJsonAsync("api/values",student);
        response.EnsureSuccessStatusCode();

       }

      } 
    }

现在在邮递员中,我选择一个POST请求,选择json(application / json)并将其包含在主体字段中。请注意,此json数据直接映射到我在Student Model类中拥有的数据。

{
 "studentId" : "23",

 "firstName" : "John",

 "lastName" : "Black",

 "address" : "DC"
}

当我触发请求时,我收到了500:Internal Server Error。我愿意接受建议,如果我的代码有误,请告诉我。我很想这样做。我整天都在这里。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您要从客户端调用某个操作,但是在服务器中必须实际处理该请求,您执行的方式会导致无限循环,那么httpclient类是完全错误的该请求到达您的服务器,然后又一次又一次地发送到服务器,您必须在控制器中执行此操作

    namespace SelfApi.Controllers
 {

   public class ValuesController : ApiController
    {
      private AppDataBaseContext DB = new AppDataBaseContext();

   // POST api/values
   public async Task PostAsync([FromBody] Student student)
    {
      DB.Student.Add(student);
      await DB.SaveChangesAsync();
return Ok();
   }

  } 
}

哪个AppDataBaseContext是您的ef DbContext。