2012-08-22 17 views
24

मैं वेब एपीआई में एक नई पद्धति है परपढ़ना FromUri और FromBody एक ही समय

[HttpPost] 
public ApiResponse PushMessage([FromUri] string x, [FromUri] string y, [FromBody] Request Request) 

जहां अनुरोध वर्ग है

तरह
public class Request 
{ 
    public string Message { get; set; } 
    public bool TestingMode { get; set; } 
} 

मैं स्थानीय होस्ट करने के लिए/पुशर/PushMessage एक प्रश्न बना रही हूँ ? x = foo & y = PostBody के साथ बार:

{ Message: "foobar" , TestingMode:true } 

Am मैं कुछ कमी?

Message=foobar&TestingMode=true 

आप यह सुनिश्चित करें कि HTTP शीर्षक शामिल

Content-Type: application/x-www-form-urlencoded 

संपादित करना है:

उत्तर

26

एक पोस्ट शरीर आम तौर पर इस तरह की एक URI स्ट्रिंग है क्योंकि यह अभी भी काम नहीं कर रहा है, मैं खुद को एक पूर्ण उदाहरण बनाया।
यह सही डेटा प्रिंट करता है।
मैंने भी .NET 4.5 आरसी का उपयोग किया।

// server-side 
public class ValuesController : ApiController { 
    [HttpPost] 
    public string PushMessage([FromUri] string x, [FromUri] string y, [FromBody] Person p) { 
     return p.ToString(); 
    } 
} 

public class Person { 
    public string Name { get; set; } 
    public int Age { get; set; } 

    public override string ToString() { 
     return this.Name + ": " + this.Age; 
    } 
} 

// client-side 
public class Program { 
    private static readonly string URL = "http://localhost:6299/api/values/PushMessage?x=asd&y=qwe"; 

    public static void Main(string[] args) { 
     NameValueCollection data = new NameValueCollection(); 
     data.Add("Name", "Johannes"); 
     data.Add("Age", "24"); 

     WebClient client = new WebClient(); 
     client.UploadValuesCompleted += UploadValuesCompleted; 
     client.Headers["Content-Type"] = "application/x-www-form-urlencoded"; 
     Task t = client.UploadValuesTaskAsync(new Uri(URL), "POST", data); 
     t.Wait(); 
    } 

    private static void UploadValuesCompleted(object sender, UploadValuesCompletedEventArgs e) { 
     Console.WriteLine(Encoding.ASCII.GetString(e.Result)); 
    } 
} 
+1

यह सच ही है कि अगर मैं MVC संरचना का उपयोग है आवश्यकता नहीं है। हालांकि यह वेब एपीआई है इसलिए बाध्यकारी एमवीसी से अलग है। लेकिन आपके उत्तर के लिए धन्यवाद! – kkocabiyik

+0

सुनिश्चित करें कि HTTP शीर्षलेख में 'सामग्री-प्रकार: एप्लिकेशन/एक्स-www-form-urlencoded' है। –

+0

आप वेब एपीआई एमवीसी पर सादे पाठ की तरह पोस्ट करने में सक्षम नहीं हैं: एस – kkocabiyik

0

आप अनुरोध शरीर में json पोस्ट करने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं:

var httpClient = new HttpClient(); 
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

Request request = new Request(); 
HttpResponseMessage response = httpClient.PostAsJsonAsync("http://localhost/Pusher/PushMessage?x=foo&y=bar", request).Result; 

//check if (response.IsSuccessStatusCode) 
var createResult = response.Content.ReadAsAsync<YourResultObject>().Result; 
1

वेब एपीआई नामकरण नियमों का उपयोग करता है। पोस्ट के साथ एक पोस्ट के लिए विधि शुरू की जानी चाहिए।

आपको अपने पुशमेज़ेज को विधि नाम पोस्टमेसेज में बदलना चाहिए।

इसके अलावा वेब एपीआई डिफ़ॉल्ट रूप से आपके मार्ग पर निर्भर करता है (एपीआई/मूल्य/संदेश 'और पुशर/पुष्मेसेज तक नहीं।

[HttpPost] विशेषता

+0

पोस्ट के लिए विधि पोस्ट के साथ शुरू की जानी चाहिए। : –

+0

आवश्यक नहीं है यह उत्तर गलत है। विधि को केवल 'पोस्ट' की आवश्यकता होती है जब कोई [HttpPost] विशेषता नहीं होती है। – ehsan88

संबंधित मुद्दे