Web services 我想按其他条件搜索,而不是按id(WEB API)
我是创建WEB API的初学者 我从数据库自动生成模型,然后为每个模型生成控制器,我的服务在默认设置下运行良好 例如:Web services 我想按其他条件搜索,而不是按id(WEB API),web-services,rest,asp.net-web-api,Web Services,Rest,Asp.net Web Api,我是创建WEB API的初学者 我从数据库自动生成模型,然后为每个模型生成控制器,我的服务在默认设置下运行良好 例如: [ResponseType(typeof(student))] public IHttpActionResult Getstudent(int id) { student student = db.students.Find(id); if (student == null) { retur
[ResponseType(typeof(student))]
public IHttpActionResult Getstudent(int id)
{
student student = db.students.Find(id);
if (student == null)
{
return NotFound();
}
return Ok(student);
}
现在,当我使用以下命令调用它时:
Localhost…/api/student/5它返回正确的数据 问题是:我想通过其他方式搜索,而不是通过ID(主键),例如通过用户名和密码。 我搜索了很多,很多人都在谈论路由,新方法,是什么让我如此困惑,因为我是一个初学者。 如果有人能帮我,给我寄些教程或其他什么,我将不胜感激 这是我的控制器代码:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;
using studentsexams.Models;
namespace studentsexams.Controllers
{
public class studentController : ApiController
{
private studentsEntities db = new studentsEntities();
// GET api/student
public IQueryable<student> Getstudents()
{
return db.students;
}
// GET api/student/5
[ResponseType(typeof(student))]
public IHttpActionResult Getstudent(int id)
{
student student = db.students.Find(id);
if (student == null)
{
return NotFound();
}
return Ok(student);
}
public student GetStudentByName(string name)
{
return StudentRepository.GetStudents().FirstOrDefault(s => s.Id == 1);
}
// PUT api/student/5
public IHttpActionResult Putstudent(int id, student student)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != student.ids)
{
return BadRequest();
}
db.Entry(student).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!studentExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
// POST api/student
[ResponseType(typeof(student))]
public IHttpActionResult Poststudent(student student)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.students.Add(student);
try
{
db.SaveChanges();
}
catch (DbUpdateException)
{
if (studentExists(student.ids))
{
return Conflict();
}
else
{
throw;
}
}
return CreatedAtRoute("DefaultApi", new { id = student.ids }, student);
}
// DELETE api/student/5
[ResponseType(typeof(student))]
public IHttpActionResult Deletestudent(int id)
{
student student = db.students.Find(id);
if (student == null)
{
return NotFound();
}
db.students.Remove(student);
db.SaveChanges();
return Ok(student);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool studentExists(int id)
{
return db.students.Count(e => e.ids == id) > 0;
}
}
使用系统;
使用System.Collections.Generic;
使用系统数据;
使用System.Data.Entity;
使用System.Data.Entity.Infrastructure;
使用System.Linq;
Net系统;
使用System.Net.Http;
使用System.Web.Http;
使用System.Web.Http.Description;
使用学生照相机、模型;
命名空间studentsexams.Controllers
{
公共类学生控制器:ApiController
{
私人学生属性db=新学生属性();
//获取api/学生
公共IQueryable Getstudents()
{
返回db.students;
}
//获取api/student/5
[响应类型(类型(学生))]
公共IHttpActionResult Getstudent(内部id)
{
student=db.students.Find(id);
如果(学生==null)
{
返回NotFound();
}
返回Ok(学生);
}
公共学生GetStudentByName(字符串名称)
{
return StudentRepository.GetStudents().FirstOrDefault(s=>s.Id==1);
}
//放置api/student/5
公共IHttpActionResult Putstudent(内部id,学生)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
if(id!=student.id)
{
返回请求();
}
db.Entry(student.State=EntityState.Modified;
尝试
{
db.SaveChanges();
}
catch(DbUpdateConcurrencyException)
{
如果(!studentExists(id))
{
返回NotFound();
}
其他的
{
投掷;
}
}
返回状态码(HttpStatusCode.NoContent);
}
//海报/学生
[响应类型(类型(学生))]
公共IHttpActionResult博士后(学生)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
db.students.Add(学生);
尝试
{
db.SaveChanges();
}
捕获(DbUpdateException)
{
if(studentExists(student.id))
{
返回冲突();
}
其他的
{
投掷;
}
}
返回CreatedAtRoute(“DefaultApi”,新的{id=student.ids},student);
}
//删除api/student/5
[响应类型(类型(学生))]
公共IHttpActionResult Deletestudent(内部id)
{
student=db.students.Find(id);
如果(学生==null)
{
返回NotFound();
}
db.student.Remove(学生);
db.SaveChanges();
返回Ok(学生);
}
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
db.Dispose();
}
基地。处置(处置);
}
私有bool studentExists(内部id)
{
返回db.students.Count(e=>e.ids==id)>0;
}
}
}假设您希望调用GetStudentByName的API操作,因此需要在WebApiConfig中添加路由 如下所示类似:-
config.Routes.MapHttpRoute("DefaultApiWithAction", "api/{controller}/{action}/{name}");
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
public Student GetStudentByName(string name)
{
return db.students.ToList().FirstOrDefault(s => s.StudentName == name);
//in this line just replace StudentName to your student name
//property of model class.
}
$.getJSON('/api/student/GetStudentByName/abc', function (data) {
$.each(data, function (key, value) {
});
});
并在控制器中添加操作,如:-
config.Routes.MapHttpRoute("DefaultApiWithAction", "api/{controller}/{action}/{name}");
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
public Student GetStudentByName(string name)
{
return db.students.ToList().FirstOrDefault(s => s.StudentName == name);
//in this line just replace StudentName to your student name
//property of model class.
}
$.getJSON('/api/student/GetStudentByName/abc', function (data) {
$.each(data, function (key, value) {
});
});
和调用部分,如:-
config.Routes.MapHttpRoute("DefaultApiWithAction", "api/{controller}/{action}/{name}");
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
public Student GetStudentByName(string name)
{
return db.students.ToList().FirstOrDefault(s => s.StudentName == name);
//in this line just replace StudentName to your student name
//property of model class.
}
$.getJSON('/api/student/GetStudentByName/abc', function (data) {
$.each(data, function (key, value) {
});
});
因此,在本例中,您将能够使用abc名称调用GetStudentByName操作。在控制器中,我们应该添加–由Pragnesh Khalas回答:
public Student GetStudentByName(string name)
{
return db.students.ToList().FirstOrDefault(s => s.StudentName == name);
}
在这一行中,只需将StudentName替换为model类的student name属性
它工作正常,返回正确的数据 谢谢你回答我。我必须在模型中定义GetStudents()吗?代替StudentRepository-我必须写我的类(控制器或模型)的名称吗?如果您在模型中定义函数,那么就不可能作为API调用。我知道,但我正在努力解决错误。若我只是将这部分代码复制粘贴到控制器中,它将返回一个studentRepository错误——“当前上下文中不存在”。怎么办?这实际上是自动生成的代码。除了您的代码,我没有插入任何内容。更改代码,如return db.students.ToList().FirstOrDefault(s=>s.StudentName==name);在这一行中,只需将StudentName替换为model类的student name属性。