Return value of UploadStringAsync().?

2020-04-16 02:53发布

问题:

My question is correct or incorrect I don't know, but I would like to know if is it possible to return the value of UploadStringAsync() of post methods using WebClient?

    string serviceURL = REST_URI + servicePath;
    Uri URI = new Uri(serviceURL);
    System.Net.WebClient webClient = new WebClient();
    webClient.Headers["ContentType"] = "application/json";
    webClient.Headers["Accept"] = "application/json";
    webClient.UploadStringCompleted += this.sendPostCompleted;
    webClient.UploadStringAsync(URI, HTTP_POST, result);
    return ??;

If we can return the value of UploadStringAsync(URI, HTTP_POST, result); please let me know?

回答1:

You can use UploadStringCompleted event and get result in event handler. Once upload completes (failed or succeed) event is raised.

Attach

client.UploadStringCompleted 
               += new UploadStringCompletedEventHandler (UploadStringCallback2);

Use:

void UploadStringCallback2(object sender, UploadStringCompletedEventArgs e)
{
//e.Result use it
}

If you want to return result of the upload you can wait for event to be raised like here using AutoResetEvent



回答2:

From .NET 4.5 we can use UploadStringTaskAsync to retrieve return value directly.

string rspBody = await client.UploadStringTaskAsync(uri, "POST");

ref: MSDN



回答3:

There is nothing to return from that function. You've already set up an event handler for UploadStringCompleted, you can get the result of the action in the handler.

This is the signature:

public delegate void UploadStringCompletedEventHandler(
    Object sender,
    UploadStringCompletedEventArgs e
)

The second parameter has the information you need: UploadStringCompletedEventArgs, the Result property contains the server's response.