William Venice
William Venice

Reputation: 329

Talking to a Web API from a Webforms application

I have an asp.net webforms application as my UI layer. This application is responsible for sending an object list down to my DAL Class Library which will then send this object list to a WebAPI for processing.

The WebAPI needs to retrieve the object list, do the processing and send an OK status code back.

Is this possible? If is there any good documentation on how this is done?

Here is what I have in my webforms app:

public static async Task<bool> MyFunction(IList<string> Ids)
{
    using (var client = new HttpClient())
    {
        bool success = false;

        client.BaseAddress = new Uri("http://localhost:9000/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        // HTTP GET
        HttpResponseMessage response = await client.GetAsync("api/products/MyProcessFunctionName");
        if (response.IsSuccessStatusCode)
        {
            success = true;
        }

        return success;
    }
}

I need to figure out how to send the list of string Ids to the WebApi processing function as a parameter.

Upvotes: 2

Views: 14616

Answers (3)

kamus
kamus

Reputation: 797

You can use the Microsoft.AspNet.WebApi.Client to use your restful API. Here is an official example from the asp.net site:

http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

If you need call your custom function MyProcessFunction first you need to define the function in the controller

 public IEnumerable<string> MyProcessFunctionName()
 {
 return new string[] { "value1", "value2" };
 }

after that, if you need to call it by name client.GetAsync("api/products/MyProcessFunctionName") you need to change the RouteConfig file to allow API calls by action name:

Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { action = "get", id = RouteParameter.Optional }
);

Upvotes: 1

JGV
JGV

Reputation: 5187

I assume that you already know how to setup Web API controller in your project.

Here is a code sample for sending data from UI back to Web API controller method, which will then save that data in database,

Step 1:

In your front-end, I hope you will have a custom javascript file which handles any button click event. On that, try to send the data from UI to Web API using a POST method as shown below,

            var StaffSaveRequest = {};
            StaffSaveRequest.StaffDetails = {};
            StaffSaveRequest.StaffDetails.Name = "Test Name";

            $.ajax({
                url: 'api/Staff/SaveStaff', //this is the path to web api controller method
                type: 'POST',                   
                dataType: 'json',
                data: StaffSaveRequest,
                success: function (response, textStatus, xhr) {
                    //handle success 
                },
                error: function (xhr, textStatus, errorThrown) {                        
                    if (textStatus != 'abort') {
                      //handle error
                    }
                }
            });

Step 2:

Add a controller class as shown below and see the inline comments. This controller class will then interact with method in Data Access layer for saving any information.

    public class StaffController : ApiController //inherits ApiController 
    {
        [HttpPost] //add post attribute
        public HttpResponseMessage SaveStaff(StaffSaveRequest staffSaveRequest)
        {
            try
            {            
                var result = StaffManager.Save(staffSaveRequest);//save in database using a method in data access layer
                return Request.CreateResponse(HttpStatusCode.OK, result);//result the response back
            }
            catch (Exception ex)
            {
               //log error
            }
        }

I hope this will give you some idea on where and how to start. Reply back, if you still have issues/questions.

Upvotes: 2

Paritosh
Paritosh

Reputation: 4503

It's possible to call WebApi from your webforms project. Here is a sample using WPF to call WebApi, but call should be same for webforms: http://www.codeproject.com/Articles/611176/Calling-ASP-Net-WebAPI-using-HttpClient

Upvotes: 0

Related Questions