如何获取API控制器的URL

时间:2016-01-05 13:45:20

标签: c# asp.net asp.net-web-api

我有一个ASP.NET MVC站点,它有4层:

  1. UI
  2. DAL
  3. BLL
  4. 服务
  5. 在服务层,我有所有的WebApi控制器。我在UI层中引用了Services层。

    这是jQuery ajax调用:

    $.ajax(
    {
      url : "api/albums",
      type: "POST",
      data: {} ,
      sucess:function(data){},
      error:function(e){}
    })
    

    现在我收到上述网址的404错误。我同意这很明显。

    我的问题是 - 在这种情况下,服务/ API的URL是什么?

    API控制器:

    public class AlbumsController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return albums {  };
        }
    
         // GET api/values
        public void Post(Album album)
        {
            albums.Add(album);
        }
     }
    

    WebAPi.config:

    config.MapHttpAttributeRoutes();
    
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
    

    在看到几个答案之后,我在这里添加输入。

    当我说/api/albums时,它会查找名为api的控制器并尝试查找名为Albums的操作,因为在UI层中,路由已配置为{controller}/{action}/{id}。我试图调用服务层中存在的API控制器,并在UI层中引用该层。

3 个答案:

答案 0 :(得分:1)

这里你已经硬编码了一个网址:

url : "api/MyControllerName",

这很糟糕,永远不应该这样做。你应该使用网址助手。

因此,在ASP.NET MVC布局中,您可以使用Url帮助程序生成正确的URL:

<script>
    window.myUrl = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "Albums" })';
</script>

然后在发出AJAX请求时使用它:

$.ajax({
    url : window.myUrl,
    ...
});

答案 1 :(得分:0)

$.ajax(
{
  url : "api/Albums/",
  type: "GET",
  sucess:function(data){},
  error:function(e){}
})
  • url = api /控制器名称(不带后缀控制器)
  • Type = GET,POST,PUT或DELETE
  • 数据=仅可用于GET以外的操作

答案 2 :(得分:0)

 url : "api/MyControllerName/ActionName"

在此参数中,您还应传递操作方法名称,目前您收到404错误,因为可能默认情况下,索引方法正在调用,而控制器中可能不存在此类错误,因此请尝试传递ActionMethod名称