如何使用OdataController使用Web Api服务?
我打电话服务这个网址:http://localhost:7951/odata/Student 但我得到了错误如何使用OdataController使用Web Api服务?
找不到404
我在哪里做错了吗?
我的DbContext类如下:
public class DataContext : DbContext
{
public DataContext()
: base("name=FrameworkConnStr")
{
}
public DbSet<Student> Students { get; set; }
public DbSet<StudentAddress> StudentAddresses { get; set; }
}
[Table("M_DEMIR.STUDENT")]
public partial class Student
{
public Student()
{
StudentAddress = new HashSet<StudentAddress>();
}
[Column("ID"), Key]
public int Id { get; set; }
[Column("NAME", TypeName = "varchar2"), MaxLength(25)]
public string Name { get; set; }
[Column("SURNAME", TypeName = "varchar2"), MaxLength(50)]
public string Surname { get; set; }
public virtual ICollection<StudentAddress> StudentAddress { get; set; }
}
[Table("M_DEMIR.STUDENTADDRESS")]
public partial class StudentAddress
{
[Column("ID"), Key]
public int Id { get; set; }
[Column("STUDENT_ID")]
public int StudentId { get; set; }
[Column("CITY", TypeName = "varchar2"), MaxLength(25)]
public string City { get; set; }
[ForeignKey("StudentId")]
public virtual Student Student { get; set; }
}
控制器代码是如下:
[EnableQuery]
public class StudentController : ODataController
{
DataContext db = new DataContext();
public IHttpActionResult Get()
{
return Ok();
}
}
而且WebApiConfig守则如下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Student>("Students");
builder.EntitySet<StudentAddress>("StudentAddresses");
config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
}
我在哪里做错了?
[ODataRoutePrefix("Students")]
public class StudentController : ODataController
{
DataContext db = new DataContext();
[EnableQuery(MaxTop = 100)] // MaxTop so you can use the $top in the query string
[ODataRoute]
public IHttpActionResult Get()
{
return Ok(db.Students); // you do want to return something that can be queried
}
}
- EnableQuery应该是GET方法。
- 将ODataRoute添加到Get方法。
- 添加ODataRoutePrefix("Students")类定义,你现在有EnableQuery
将网址变更为http://localhost:7951/odata/Students(添加一个或多个)。
另外不要忘记通过覆盖控制器的Dispose
方法来处置您的DbContext
实例。
ODataRoutePrefix和ODataRoute无法正常工作。它们不在Odata.dll中吗? – Demirline
@Demirline - 它们位于命名空间'System.Web.OData.Routing',程序集'System.Web.OData'中。 – Igor
嗨Igor.Thank你的帮助。我在WebapiConfig中出错。代码是config.MapODataServiceRoute(“odata”,“odata”,builder.GetEdmModel());错误是“类型'Microsoft.OData.Edm.IEdmModel'在未引用的程序集中定义,您必须添加对程序集'Microsoft.OData.Edm,Version = 6.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35' 。” – Demirline
你会得到什么错误? –
我更新了问题。 – Demirline
'EnableQuery'应该在'Get'方法上。将'ODataRoute'添加到Get方法。将ODataRoutePrefix(“Students”)添加到您现在具有EnableQuery的类定义中。将您的网址更改为“http:// localhost:7951/odata/Students”(添加了一个s)。 – Igor