【发布时间】:2015-02-20 20:30:29
【问题描述】:
我已尝试遵循默认的 Web API 教程:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api
这就是我所做的:
1) 我在WebApiConfig 中添加了动作路由:
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
2) 我在导航栏上添加了一个带有客户端 javascript 调用的链接:
<a onclick="RetrieveNext();" href="#">Retrieve next</a>
3) 这是我的观点:
<div class="row">
<div class="col-md-4">
<h2>Next barcode</h2>
<p id="barcode">
No available barcode
</p>
</div>
</div>
<script>
var uri = 'api/Barcode';
$(document).ready(function () {
});
function RetrieveNext() {
uri = 'api/Barcode/RetrieveNext';
$.getJSON(uri)
.done(function (data) {
$('#barcode').text(data);
})
.fail(function (jqXHR, textStatus, err) {
$('#barcode').text('Error: ' + err);
});
}
</script>
4) 这是我的简单 ApiController 和 1 个操作:
public class BarcodeController : ApiController
{
[HttpGet]
public IHttpActionResult RetrieveNext()
{
string barcode = "123456";
if (barcode == null)
{
return NotFound();
}
return Ok(barcode);
}
}
当我点击我的链接时,我得到:Error: Not Found 在我的 <p id="barcode"> 中,这意味着 JavaScript 可以工作,但没有调用 Action。
这是通话详情:
我在这里错过了什么?我在 Action 中设置了断点,但无法访问此代码...
【问题讨论】:
-
尝试在 url 中为
id添加一个值——在这种情况下你的操作会被调用吗? -
你试过
uri = 'api/Barcode';它可能会忽略RetrieveNext并根据它的签名自动获取默认的HttpGet并给你你想要的 -
我试过添加 id 并没有帮助。试过 uri = 'api/条形码';它不起作用。这个控制器将包含几个 [HttpGet] 动作,所以我需要能够达到我需要的确切动作
-
怎么样骆驼套控制器如
uri = 'api/barcode'并尝试你的动作名称。在教程的一半左右,它显示了映射到 URI 的控制器方法,它们是驼峰式的 -
我试过了……不行
标签: javascript asp.net asp.net-mvc api asp.net-mvc-5