使用 ajax 使用路由属性调用网络 API
Calling web API with route attribute using ajax
我有一个网络 API 控制器
public class DefaultController : ApiController
{
[HttpPost]
public IHttpActionResult PostAction(int id, Student student)
{
return Ok("This is message");
}
}
我可以使用 JQuery
调用 PostAction 方法
<script>
$(document).ready(function() {
$("#btn").click(function() {
var obj = { 'name': 'alex' };
$.ajax({
method: "POST",
url: '@Url.Action("PostAction","Default",new {id=3,httproute=true})',
data: obj
})
.done(function(data) {
alert("success: " + data);
})
.fail(function(xhr, status, error) {
alert("error: " + xhr.responseText);
});
});
});
</script>
生成的 url 是:/api/default/3'
现在如果我将路由属性放在控制器上
[Route("api/default")]
public class DefaultController : ApiController
我应该如何使用 Url.Action 调用 API?
您不将 Route 属性应用于控制器,而是将其应用于操作方法。
此外,应用与默认路由模式匹配的路由模式也没有意义 url。但是,如果您使用属性路由为您的操作方法提供一个很好的 url 模式,您还可以指定路由名称,您可以将其与 HttpRouteUrl
辅助方法一起使用。
public class DefaultController : ApiController
{
[HttpPost]
[Route("api/default2",Name = "MyApi")]
public IHttpActionResult PostAction(int id, Student student)
{
return Ok("This is message");
}
}
并且在您的剃刀视图中,您可以执行此操作。
<script>
var url = "@Url.HttpRouteUrl("MyApi", new { id = 3 })";
</script>
我有一个网络 API 控制器
public class DefaultController : ApiController
{
[HttpPost]
public IHttpActionResult PostAction(int id, Student student)
{
return Ok("This is message");
}
}
我可以使用 JQuery
调用 PostAction 方法 <script>
$(document).ready(function() {
$("#btn").click(function() {
var obj = { 'name': 'alex' };
$.ajax({
method: "POST",
url: '@Url.Action("PostAction","Default",new {id=3,httproute=true})',
data: obj
})
.done(function(data) {
alert("success: " + data);
})
.fail(function(xhr, status, error) {
alert("error: " + xhr.responseText);
});
});
});
</script>
生成的 url 是:/api/default/3'
现在如果我将路由属性放在控制器上
[Route("api/default")]
public class DefaultController : ApiController
我应该如何使用 Url.Action 调用 API?
您不将 Route 属性应用于控制器,而是将其应用于操作方法。
此外,应用与默认路由模式匹配的路由模式也没有意义 url。但是,如果您使用属性路由为您的操作方法提供一个很好的 url 模式,您还可以指定路由名称,您可以将其与 HttpRouteUrl
辅助方法一起使用。
public class DefaultController : ApiController
{
[HttpPost]
[Route("api/default2",Name = "MyApi")]
public IHttpActionResult PostAction(int id, Student student)
{
return Ok("This is message");
}
}
并且在您的剃刀视图中,您可以执行此操作。
<script>
var url = "@Url.HttpRouteUrl("MyApi", new { id = 3 })";
</script>