【发布时间】:2015-03-04 10:05:28
【问题描述】:
我正在创建一个简单的项目来测试实体框架中的功能。在前端,我想要一个使用 OData API 与服务器交互的 SPA 应用程序。我将我的第一个 ODataController 设置如下
public class BlogPostsController : ODataController
{
private readonly IBlogPostService _blogPostService;
public BlogPostsController(
IBlogPostService blogPostService)
{
_blogPostService = blogPostService;
}
[HttpGet]
[EnableQuery]
public IQueryable<BlogPost> GetBlogPosts()
{
return _blogPostService.Queryable();
}
[EnableQuery]
public SingleResult<BlogPost> GetBlogPost([FromODataUri] int key)
{
return SingleResult.Create(_blogPostService.Queryable().Where(bp => bp.Id == key));
}
}
我的 ODataConfig 设置如下
public static class ODataConfig
{
public static void Register(HttpConfiguration config)
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Entities.BlogPost>(typeof(Entities.BlogPost).Name);
config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
config.AddODataQueryFilter();
}
}
我的网站托管在我机器上的 IIS 中,当我访问 http://localhost/mytestsite/odata/BlogPosts 时,我得到一个 404。但是,如果我更改我的代码以更改我的控制器以将 BlogPosts 替换为 BlogPost,那么我可以访问 URL http://localhost/mytestsite/odata/BlogPost一切都按预期工作。我的工作控制器在下面
public class BlogPostController : ODataController
{
private readonly IBlogPostService _blogPostService;
public BlogPostController(
IBlogPostService blogPostService)
{
_blogPostService = blogPostService;
}
[HttpGet]
[EnableQuery]
public IQueryable<BlogPost> GetBlogPost()
{
return _blogPostService.Queryable();
}
[EnableQuery]
public SingleResult<BlogPost> GetBlogPost([FromODataUri] int key)
{
return SingleResult.Create(_blogPostService.Queryable().Where(bp => bp.Id == key));
}
}
另一个问题是,如果我尝试访问 http://localhost/FourTen.Blog.Web/odata/blogpost,我也会得到 404。唯一的区别是 URL 中的博文是小写的。
我的问题是,我是否遗漏了一些命名约定?为什么 URL 区分大小写?
【问题讨论】:
标签: c# asp.net-web-api odata