2013-10-26 3 views
8

웹 API 컨트롤러에 C# 개체를 전달하려고합니다. API는 게시 된 Product 유형의 객체를 저장하도록 구성됩니다. 나는 Jquery Ajax 메서드를 사용하여 객체를 성공적으로 추가했으며 이제는 C#에서 동일한 결과를 얻으려고합니다.webapi 컨트롤러에 C# 개체 보내기

가 postproduct 메소드가 호출되지 않습니다
public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Category { get; set; } 
    public decimal Price { get; set; } 
} 

     static void Main(string[] args) 
    { 
     string apiUrl = @"http://localhost:3393/api/products"; 
     var client = new HttpClient(); 
     client.PostAsJsonAsync<Product>(apiUrl, new Product() { Id = 2, Name = "Jeans", Price = 200, Category = "Clothing" }); 

    } 

, 어떻게 컨트롤러에이 개체를 보낼 :

나는 API에 POST 요청을 보낼 수있는 간단한 콘솔 응용 프로그램을 만들었습니다? 항목을 추가하는 데 사용

방법 : 당신은 어떻게 든 포스팅 형식으로 JSON을 허용하지 않도록 설정 한 같은

public HttpResponseMessage PostProduct([FromBody]Product item) 
    { 
     item = repository.Add(item); 
     var response = Request.CreateResponse<Product>(HttpStatusCode.Created, item); 

     string uri = Url.Link("DefaultApi", new { id = item.Id }); 
     response.Headers.Location = new Uri(uri); 
     return response; 
    } 
+0

코드가 좋을 것 같습니다. 피들러에서 무엇을 볼 수 있습니까? 서버에서 webapi 추적을 활성화 했습니까? –

+0

HttpClient에서 보낸 요청을 사용하지 않는 양식에서 비롯된 요청을 Fiddler에서 볼 수 있습니다. 또한 api를 http://producttestapi.azurewebsites.net/api/products에 업로드했지만 HttpClient의 요청 중 해당 API에 도달하지 못했습니다. – neo112

+0

또한 해당 URL의 index.html을 확인하십시오. 아약스를 통해 객체를 보내는 데 사용하는 양식이 해당 API가 작동하도록 작동합니다. – neo112

답변

16

보인다. application/x-www-form-urlencoded을 사용하여 엔드 포인트로 데이터를 보내고 새 제품을 작성할 수있었습니다. 이것이 아마도 jQuery 요청이 어떻게 수행하고 있는지 알 수 있습니다.

웹 API의 구성 코드를 표시 할 수 있습니까? 기본 포맷터를 변경합니까?

또는 HttpClient에서 양식을 보낼 수 있습니다. 예 :

string apiUrl = "http://producttestapi.azurewebsites.net/api/products"; 
    var client = new HttpClient(); 
    var values = new Dictionary<string, string>() 
     { 
      {"Id", "6"}, 
      {"Name", "Skis"}, 
      {"Price", "100"}, 
      {"Category", "Sports"} 
     }; 
    var content = new FormUrlEncodedContent(values); 

    var response = await client.PostAsync(apiUrl, content); 
    response.EnsureSuccessStatusCode(); 
+0

ajax 메소드에는 'dataType : "json"이 정의되어 있습니다. 따라서 컨트롤러가 여전히 JSON을 데이터로 받아 들일 것으로 생각하게됩니다. 나는 새로운 객체를리스트에 추가하는 방법을 추가했다. 구성 코드가 표시됩니다. App_Start 폴더의 .cs 파일입니까? 한편, 여기에 게시 된 approuch를 시도합니다. – neo112

+0

PostAsJson 메서드를 사용하여 코드를 사용하여 사용할 수 있었지만 이제는 작동합니다. 대단히 감사합니다! – neo112

+0

클래스에 문자열 배열과 같은 매개 변수가 있으면 어떻게 할 수 있습니까? FormUrlEncodedContent가 Dictionary 를 허용하지 않기 때문에 사전에 설정할 수 없습니다. – Yasitha