我有一个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处理函数。
答案 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