【问题标题】:Simple Web API Calculator Assistance简单的 Web API 计算器帮助
【发布时间】:2019-01-25 14:23:41
【问题描述】:

我正在 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>

【问题讨论】:

  • I can't get them to work 是什么意思?您面临什么问题?
  • 如果我添加减法,我会在返回任何一个按钮时出现 404 错误。如果我只是做加法,它就可以工作,并且我得到没有 404 的结果。所以我不确定添加减法按钮和要在脚本中调用的函数后有什么区别

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


【解决方案1】:

确保你没有忘记这一行

 config.MapHttpAttributeRoutes();

在 WebApiConfig 文件中

我怀疑你的 api 看不到属性路由,只是响应默认路由和当前正在执行添加操作的默认获取操作,你也可以评论添加操作并检查会发生什么来确认那个

【讨论】:

  • 我希望就是这样,但它似乎在 WebApiConfig 文件中。不过谢谢!好主意!
【解决方案2】:

Web API 和 API 控制器几乎不关心控制器中的操作名称。因此,Get 和 GetSub 这两个操作几乎相同,因为参数列表相同,返回值也几乎相同。因此 Get 的原因是它自己工作,但是当你和 GetSub 一起时就会崩溃。

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多