dimanche 19 juin 2016

How can Web Api take list and return different type for asp.net web api

I'm new in Web Api and working in a project which want to add list in web Api method and return different type of mixed between restaurant and rest_location. The relation between restaurant and rest_location is one to many

but it doesn't work and I don't know where is the wrong

when I run it the error appear

{"Message":"The requested resource does not support http method 'GET'."}

the code in server web Api

    [HttpPost]
    [Route("api/Restaurants/res_by_locat/{x}/{res_loc}")]
    [ResponseType(typeof(Restaurant))]
    [ResponseType(typeof(Rest_Location))]
    public HttpResponseMessage GetResturantsBylocation([FromUri]int x,[FromBody] List<Rest_Location> res_loc)
    {
        List<Table> table = new List<Table>();
        var lstitem = from t1 in res_loc
                      from t2 in db.Restaurants.Where(y => y.R_ID == t1.R_ID )
                                      .DefaultIfEmpty()
                      select new { t1.L_Adress, t2.R_Name };

        //foreach (var item in lstitem)
        //{
        //    table.Add(item);
        //}
        if (lstitem == null || !lstitem.Any())
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }

        else return ControllerContext.Request.CreateResponse(HttpStatusCode.OK, new { lstitem });          

}

in client

protected void btn_ddl_Click(object sender, EventArgs e)
    {
        if (locationddl.SelectedValue == "0")
        {
            lbl_result.Text = "Chose a Location First ! ";               
        }
        else
        {
            try
            {
                HttpClient client = new HttpClient();
                client.BaseAddress = new Uri("http://localhost:10566/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/json"));
                var fromddl = locationddl.SelectedItem.Text;
                //lbl_result.Text = fromddl;
                    var response = client.GetAsync("api/Locations/getid_by_name/" + fromddl).Result;
                    // if (Page.IsValid)
                    {
                        if (response.IsSuccessStatusCode)
                        {

                            Location ll = response.Content.ReadAsAsync<Location>().Result;
                            int x = ll.L_ID;

                            lbl_msg.Text = x.ToString();

                            var response2_get_ids_Rests = client.GetAsync("api/Rest_Location/res_by_locat/" + x).Result;

                            if (response2_get_ids_Rests.IsSuccessStatusCode)
                            {
                                List<Rest_Location> rests_locations = response2_get_ids_Rests.Content.ReadAsAsync<List<Rest_Location>>().Result;
                            //var items= rests_locations.FirstOrDefault(rl => rl.L_ID == x);
                           // GridView2.DataSource = rests_locations;
                             //   GridView2.DataBind();
                             HttpResponseMessage response3_get_resturants_by = client.PostAsJsonAsync("api/Restaurants/res_by_locat/" + x , rests_locations).Result;
                            if (response3_get_resturants_by.IsSuccessStatusCode)
                            {
                                var news= response3_get_resturants_by.Content.ReadAsAsync<List<Restaurant>>().Result;
                                GridView1.DataSource = news;
                                GridView1.DataBind();

                                lbl_msg.Text = "Search succesed";
                            }
                            else
                            {
                                lbl_test.Text = " not found ";
                            }
                        }

                            else
                            {
                                lbl_test.Text = " not found ";
                            }
                        }

                    }



            }
            catch (Exception ex)
            {

                lbl_msg.Text = "Couldn't Found Resaurants ! " + ex.ToString();
            }
        }
    }

Aucun commentaire:

Enregistrer un commentaire