【发布时间】:2018-12-15 19:11:42
【问题描述】:
我正在学习 ASP.NET Web 表单上的 WEB API,并已在我的项目中实现它以在模式上显示一些数据,但我无法弄清楚 api url 是如何创建的。
这是我的 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 }
);
}
所以我的问题是,网址是如何生成的?如果我的控制器叫UsersController,而类叫User,为什么叫api/users
【问题讨论】:
-
它使用您的控制器的模板和名称。 routeTemplate: "api/{controller}/{id}" --> 你的控制器名称是 Users(Controller) 因此你得到 api/users 你也可以使用属性路由,只需尝试应用 [Route("api/[controller] ")] 属性在您的控制器类声明上方, [Route("getusers")] 等在每个端点方法上方。这将产生如下的 url:: localhost:xxx/api/users/getusers
-
我试图这样做,[Route("api/[controller]")] 在控制器类的顶部和 [Route("GetUser/{id}")] 在方法上,但是它不起作用,我用 api/users/GetUser/5 调用它。我还评论了我在 global.asax 中的内容,但后来我尝试更改 global asax 中的 url,并添加了“api/{controller}/{Action}/{id}”,当我输入 api/users/getUser 时它起作用了/16
标签: javascript c# asp.net