与Webforms应用程序中的Web API交谈

时间:2015-09-21 16:24:57

标签: c# asp.net asp.net-web-api2 asp.net-web-api

我有一个asp.net webforms应用程序作为我的UI层。此应用程序负责将对象列表发送到我的DAL类库,然后将该对象列表发送到WebAPI进行处理。

WebAPI需要检索对象列表,进行处理并发回OK状态代码。

这可能吗?如果有任何关于如何做到这一点的好文件?

以下是我在webforms应用中的内容:

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;
    }
}

我需要弄清楚如何将字符串ID列表作为参数发送到WebApi处理函数。

3 个答案:

答案 0 :(得分:2)

我假设您已经知道如何在项目中设置Web API控制器。

这是一个代码示例,用于将数据从UI发送回Web API控制器方法,然后将该数据保存在数据库中,

第1步:

在您的前端,我希望您有一个自定义的javascript文件来处理任何按钮点击事件。在那,尝试使用POST方法将数据从UI发送到Web API,如下所示,

            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
                    }
                }
            });

第2步:

添加一个控制器类,如下所示,并查看内联注释。然后,此控制器类将与数据访问层中的方法进行交互,以保存任何信息。

    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
            }
        }

我希望这会让你知道在哪里以及如何开始。如果您仍有问题/问题,请回复。

答案 1 :(得分:1)

您可以使用Microsoft.AspNet.WebApi.Client来使用您的restful API。 以下是asp.net网站的官方示例:

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

如果您需要首先调用自定义函数MyProcessFunction,则需要在控制器中定义函数

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

之后,如果您需要按名称client.GetAsync("api/products/MyProcessFunctionName")拨打电话,则需要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 }
);

答案 2 :(得分:0)

可以从您的webforms项目中调用WebApi。下面是使用WPF调用WebApi的示例,但对于webforms,调用应该相同: http://www.codeproject.com/Articles/611176/Calling-ASP-Net-WebAPI-using-HttpClient