我正在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>
答案 0 :(得分:0)
确保您没有忘记这一行
config.MapHttpAttributeRoutes();
在WebApiConfig文件中
我怀疑您的api无法看到属性路由,而仅响应当前正在执行添加操作的默认路由和默认get操作,您还可以注释添加操作并检查将发生什么情况以确认
答案 1 :(得分:0)
Web API和API控制器几乎不关注控制器中操作的名称。因此,这两个动作Get和GetSub几乎相同,因为参数列表相同,并且返回值也几乎相同。因此,获取Get的原因是可以单独运行的,但是当您和GetSub一起使用时,它就会爆炸。
我的建议是,对于简单的二进制运算符,只需将诸如“ 2 + 4”或“ 19 * 5.67”之类的字符串发送到控制器中的“ Get”即可。并在名为Evaluate的控制器中创建私有帮助器函数以评估这些 通过检查并找到数字是加,减,乘还是除的简单表达式,然后完成计算并将结果返回到“获取”操作,该操作将依次将其发送给您的客户。
对于更复杂的表达式,您需要创建一个“表达式解析器”,它可以处理更复杂的表达式并计算其值。这是一个巨大的挑战。
希望这会有所帮助。