【问题标题】:Why would an making my ODataController have a plural name stop it from working为什么让我的 ODataController 具有复数名称会阻止它工作
【发布时间】: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


    【解决方案1】:

    它不起作用的原因是因为您的配置。 如果您将 EntitySet 替换为 BlogPosts 名称,则您应该使用名称 BlogPost 注册您的 EntitySet

    builder.EntitySet<Entities.BlogPost>(typeof(Entities.BlogPost).Name);
    
    builder.EntitySet<Entities.BlogPost>("BlogPosts");
    

    【讨论】:

      【解决方案2】:

      我做了更多的挖掘工作,根据这篇文章http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions,我没有遵循正确的命名约定。我的实体是 BlogPost,所以我需要一个 BlogPostController。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 2020-04-20
        • 2021-01-10
        • 1970-01-01
        • 1970-01-01
        • 2018-10-12
        相关资源
        最近更新 更多