从 Webforms 应用程序与 Web API 交谈

Talking to a Web API from a Webforms application

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

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

这可能吗?是否有关于如何完成此操作的任何好的文档?

这是我的网络表单应用程序中的内容:

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 处理函数。

可以从您的 webforms 项目调用 Web Api。这是一个使用 WPF 调用 Web Api 的示例,对于 webforms 的调用应该相同: http://www.codeproject.com/Articles/611176/Calling-ASP-Net-WebAPI-using-HttpClient

您可以使用 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 }
);

我假设您已经知道如何在您的项目中设置 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 步:

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

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

我希望这能让您对从哪里开始以及如何开始有所了解。回复,如果你还有 issues/questions.