使用 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>