简体   繁体   English

Web Api和WCF中的HTTP发布内部服务器错误500

[英]Http Post Internal Server Error 500 in Web Api & WCF

I am using WPF as Client and Web api as Service. 我使用WPF作为客户端,使用Web api作为服务。 For add new event click button and update button in WPF not returning to http post action in api controller and also returning error Internal server error. 对于添加新事件,请单击WPF中的按钮和更新按钮,而不返回到api控制器中的http post操作,并且还返回错误内部服务器错误。 Http Post method Http Post方法

[HttpPost]
public HttpResponseMessage PostEvent(EventFormModel event1)
{
    if (ModelState.IsValid)
    {
        var command = new CreateOrUpdateEventCommand(event1.EventId, event1.EventAgenda, event1.Description, event1.EventDate, event1.Location, event1.UserId);
        var result = commandBus.Submit(command);
        if (result.Success)
        {
            var response = Request.CreateResponse(HttpStatusCode.Created, event1);
            string uri = Url.Link("DefaultApi", new { id = event1.EventId });
            response.Headers.Location = new Uri(uri);
            return response;
        }
    }
    else
    {
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
    }
    throw new HttpResponseException(HttpStatusCode.BadRequest);
}

WPF click event: WPF点击事件:

private async void btnNewEvent_Click(object sender, RoutedEventArgs e)
    {
            var event1 = new Event()
            {
                EventAgenda = txtAgenda.Text,
                Description = txtEventDescription.Text,
                Location=txtLocation.Text,
                UserId=Convert.ToInt32(txtUserId.Text),
                EventId=Convert.ToInt32(txtEventId.Text),
                EventDate=Convert.ToDateTime(dateEventDate.Text),
            };
            client.BaseAddress = new Uri("http://localhost:40926/api/Event");
            // Add an Accept header for JSON format.
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
            var response = client.PostAsJsonAsync("api/Event", event1).Result;
            if (response.IsSuccessStatusCode)
            {
                MessageBox.Show("added" + response);
                txtAgenda.Text = "";
                txtEventDescription.Text = "";
                txtLocation.Text = "";
                txtUserId.Text = "";
                txtEventId.Text = "";
                dateEventDate.Text = "";
            }
            else
            {
                MessageBox.Show("Error Code" + response.StatusCode + " : Message - " + response.ReasonPhrase);
            }

} Event class in WPF application: WPF应用程序中的事件类:

 public class Event
{
    public int EventId { get; set; }
    public int UserId { get; set; }
   // [Required(ErrorMessage = "Agenda Required")]
    //[Display(Name = "Movie Name")]
    public string EventAgenda { get; set; }
  //  [Required(ErrorMessage = "Location Required")]
    public string Location { get; set; }

   // [Required(ErrorMessage = "Date Required")]
    public DateTime EventDate { get; set; }
    public string Description { get; set; }
   // public string ReminderType { get; set; }
}

I used breakpoints near post action and also click event. 我在后期操作和单击事件附近使用了断点。 but in click event near var response = client.PostAsJsonAsync("api/Event", event1).Result; 但在var响应= client.PostAsJsonAsync(“ api / Event”,event1).Result附近的点击事件中; not returing to api post method and returning Response status code does not indicate success: 500 (Internal Server Error). 不重试api post方法并返回“响应”状态代码并不表示成功:500(内部服务器错误)。 Similar issue for Update also 更新也有类似问题

-Thanks Sindhu -感谢信德

You included some parts of the URI twice. 您两次包含了URI的某些部分。

   client.BaseAddress = new Uri("http://localhost:40926/api/Event");
            // Add an Accept header for JSON format.
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
            var response = client.PostAsJsonAsync("api/Event", event1).Result;

You duplicated "api/Event". 您复制了“ api /事件”。 And would get the URI, api/Event/api/Event/. 并获得URI,api / Event / api / Event /。 For your BaseAddress you only need hostname and port. 对于您的BaseAddress,您只需要主机名和端口。

eg 例如

   client.BaseAddress = new Uri("http://localhost:40926");
   var response = client.PostAsJsonAsync("api/Event", event1).Result;

Also you are getting a 500 Internal Server error from somewhere else in your sever code. 另外,您在服务器代码中的其他位置也收到500 Internal Server错误。 I can't where right now. 我现在不能在哪里。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM