ajax提交给WebAPI控制器

时间:2015-05-05 15:00:08

标签: c# asp.net ajax asp.net-mvc asp.net-web-api

我不确定实现目标的最佳方法。寻找洞察力。我熟悉通过WPF和Silverlight使用的WebAPI服务,但这是我第一次在ASP和MVC上运行。

我正在建立一个网站,以针对电子清单(EDI 856)验证货件的内容。我有一个显示发货数据的页面,我需要用户扫描容器中的每个项目条形码。然后,我想将该条形码传递给服务,验证该商品属于该货件,然后更新页面以显示尽可能多。

我的计划是有一个文本框,用户可以在其中扫描/输入条形码,然后将该数据提交给WebAPI服务,该服务将验证信息,然后可能使用SignalR将消息发送回页面,使用项目数据更新网格。

如果这是一个不错的方法,我只是不太确定如何使用ajax来调用WebAPI端点并提供我需要的数据。

2 个答案:

答案 0 :(得分:1)

我建议不要在这种情况下使用SignalR。从您的描述来看,您需要的是提交ajax请求和接收响应的最基本用例。

您没有设计一个系统,您需要服务器启动与浏览器或类似的东西的通信,其中套接字(和SignalR作为套接字的抽象,回退到不太合适的协议)是一个巨大的过度杀伤。

不用担心,您的用例非常简单。

描述如何设置WebApi项目,如何配置路由,操作名称等等,有点超出范围。简单的谷歌搜索肯定会提供有关入门的充足质量的教程。

我只是尝试用一些代码示例解释一般的想法,以便让你思考正确的方向。

您需要创建一个ApiController。 该控制器的最简单版本可能如下所示:

public class ShipmentVerificationController : ApiController
{
    //this is the response object you will be sending back to the client website
    public class VerificationResult
    {
        public bool Valid;
    }

    public VerificationResult GetIsItemValid(string BarCode)
    {
        bool itemIsValid;
        // Implement checks against the BarCode string here
        itemIsValid = true;
        return new VerificationResult { Valid = itemIsValid };
    }
}

请注意,内部类表示您将要发回的响应。如果需要,应该使用其他信息正确填写,并且可能放入"模型"中的单独的.cs文件中。文件夹或你认为合适的地方。

我已在控制器内声明它仅用于演示目的

一旦部署了WebApi服务,从您的网站发送数据并收到反馈非常容易。 为了简化Ajax请求,经常使用jQuery。

一旦用户将条形码输入到文本框中,您就可以挂钩事件以检查是否按下了返回键(大多数条形码扫描器在输入条形码数据后发送返回键命令),然后按照:

var barcode = $("#input-field").val();

$.getJSON( "<url_to_your_webapi_service>/api/ShipmentVerification/GetIsItemValid/" + barcode, function( data ) {
if (data.Valid) {
// great, highlight the item as valid
}
else {
//better indicate an error with the scanned item
}

});

请注意,为简单起见,我没有包含任何错误处理,url参数编码,最重要的是,零授权。 如果您将Web服务部署到开放式Web但仍然不希望任何人能够调用它,则授权非常重要。

你必须自己研究这些主题,但我希望我已经向你介绍了一个简单的服务背后的核心概念和逻辑,所以你有一个基础可以开始。

如果您在提出新问题时提出具体问题和疑问。

答案 1 :(得分:0)

我实际上找到了一种更简单的方法。我没有使用WebAPI端点的想法,只是使用普通的控制器。我使用ajax来阻止页面使用新视图刷新,因为该视图实际上只是带有返回值的json数据。