简单的Web API计算器协助

时间:2018-08-19 02:59:05

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

我正在ASP.Net上上课,我需要制作一个进行计算的Web Api。我可以使其用于Addition,但是当我尝试执行其他功能时,我无法使其正常工作。我确定这很简单,但是我没有头绪。有人可以给我些帮助吗?

型号:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebAPICalc.Models
{
    public class Calc
    {
        public float Add(float fn, float sn)
        { return (sn + fn); }

        public float Sub(float fn, float sn)
        { return (sn - fn); }
    }
}

控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPICalc.Models;

namespace WebAPICalc.Controllers
{
    public class CalcController : ApiController
    {
        Calc oCalc = new Calc();

        [Route("api/calc/add/{paramOne}/{paramTwo}")]

        public float Get(float paramOne, float paramTwo)
        {
             return oCalc.Add(paramOne, paramTwo);

        }
        [Route("api/calc/sub/{paramOne}/{paramTwo}")]
         public IHttpActionResult GetSub(float paramOne, float paramTwo)
         {
             return Ok(oCalc.Sub(paramOne, paramTwo));
         }

         }
     }

查看:

<h2>Mycalc</h2>

<input type="text" id="fn" size="5" />
<input type="text" id="sn" size="5" />
<input type="text" id="tn" size="5" />
<input type="button" value="add" onclick="add();" />
<input type="button" value="sub" onclick="sub();" />



<script>

        function add() {
            alert("here api/calc/add/ " + fn.value + " /" + sn.value)
            $.ajax({
                url: "api/calc/add/" + fn.value + "/" + sn.value,
                //url: "api/calc/add/5/7",
                cache: false,
                    success: function (html) {
                    alert(html)
                    tn.value = html
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert(xhr.status);
                    alert(thrownError);
                }
            });
    }

    function sub() {
        alert("here api/calc/sub/ " + fn.value + " /" + sn.value)
        $.ajax({
            url: "api/calc/sub/" + fn.value + "/" + sn.value,
            //url: "api/calc/sub/5/7",
            cache: false,
            success: function (html) {
                alert(html)
                tn.value = html
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            }
        });
    }

</script>

2 个答案:

答案 0 :(得分:0)

确保您没有忘记这一行

 config.MapHttpAttributeRoutes();

在WebApiConfig文件中

我怀疑您的api无法看到属性路由,而仅响应当前正在执行添加操作的默认路由和默认get操作,您还可以注释添加操作并检查将发生什么情况以确认

答案 1 :(得分:0)

Web API和API控制器几乎不关注控制器中操作的名称。因此,这两个动作Get和GetSub几乎相同,因为参数列表相同,并且返回值也几乎相同。因此,获取Get的原因是可以单独运行的,但是当您和GetSub一起使用时,它就会爆炸。

我的建议是,对于简单的二进制运算符,只需将诸如“ 2 + 4”或“ 19 * 5.67”之类的字符串发送到控制器中的“ Get”即可。并在名为Evaluate的控制器中创建私有帮助器函数以评估这些 通过检查并找到数字是加,减,乘还是除的简单表达式,然后完成计算并将结果返回到“获取”操作,该操作将依次将其发送给您的客户。

对于更复杂的表达式,您需要创建一个“表达式解析器”,它可以处理更复杂的表达式并计算其值。这是一个巨大的挑战。

希望这会有所帮助。