无法弄清楚WEB API如何调用URL

时间:2018-12-14 09:56:15

标签: javascript c# asp.net

我正在ASP.NET Web表单上学习WEB API,并且已经在我的项目中实现了它,以便以模式显示一些数据,但是我不知道api url是如何创建的。

我遵循了本教程 https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

这是我的AJAX电话

<script type="text/javascript">

    function ShowUserModal(lnk, IdColaborador) {

        debugger
        //var s = lnk.id;
        //var start = s.indexOf("lnkEdit");
        //var end = s.lastIndexOf("_");
        //sub = s.substring(start, end);
        //s = s.replace(sub, "IdMatriz");
        //var hidden = document.getElementById(s);
        //var id = hidden.value;
        //alert(id);

        var uri = 'api/users/';

        $.ajax({

            URL: uri,
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            data: IdColaborador,
            success: function (data) {

                alert("Saved successfully");
            },
            fail: function(jqXHR, textStatus) {
                alert("Request failed: " + textStatus);
            }

        })
    }        
</script>

这是我的控制器

 public class UsersController : ApiController
{
    public User user { get; set; }


    //public IEnumerable<User> GetAllUsers()
    //{

    //    return users;
    //}

    public IHttpActionResult GetUser(int id)
    {
        user = new User();

        string constr = ConfigurationManager.ConnectionStrings["ControloInterno_ConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand("spOperadores", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@Action", "SELECTINF");                   
                cmd.Parameters.AddWithValue("@IdColaborador", id);

                con.Open();
                using(SqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        user.Nome = sdr["Nome"].ToString();
                        user.Criador = sdr["criador"].ToString();
                        user.DataAdm = Convert.ToDateTime(sdr["dataadmin"]);
                        user.AltData = Convert.ToDateTime(sdr["AltData"]);
                        user.Telemovel = sdr["tele"].ToString();
                        user.Departamento = sdr["Departamento"].ToString();
                        user.status = sdr["status"].ToString();
                        user.DescricaoPerfil = sdr["DescricaoPerfil"].ToString();
                        user.Observacoes = sdr["Observacoes"].ToString();
                    }
                }                                    
            }
        }

        return Ok(user);
    }
}

我必须在global.asax中使用它

protected void Application_Start(object sender, EventArgs e)

    {
        RouteTable.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = System.Web.Http.RouteParameter.Optional }
        );
    }

所以我的问题是,URL是如何生成的?如果我的控制器叫UsersController且类叫User

,为什么叫api / users

1 个答案:

答案 0 :(得分:1)

如果使用属性路由,请确保在HttpConfiguration上调用以下函数:

  // Web API routes
  config.MapHttpAttributeRoutes();

您可以在此处阅读有关属性路由的更多信息: Web api attribute routing 或者,如果您将使用MVC代替,请阅读此处: Attribute routing in MVC