首页 > 解决方案 > OData AspNetCore 对使用 $query 的长 URL 的支持不起作用

问题描述

正如本文所指出的使用$query关键字可以解决Microsoft.AspNetCore.OData.

但在我的项目中(我使用的是 8.preview3 版本)我尝试使用这个但我不断收到404 not found错误。这是我的工作 URL 示例:

https://localhost:44346/odata/WFC/APost/
https://localhost:44346/odata/WFC/APost/?$select=id
...

但是当我使用带有$query的 POST 请求时,我收到 404 错误:

    POST: https://localhost:44346/odata/WFC/APost/$query
    Content-Type: text/plain
    Request Body: $select=id

我想知道是否必须添加任何代码来启用 $query 功能!?

这是我的代码的相关部分:

     // version 8.preview3 of Microsoft.AspNetCore.OData code

     services.AddOData(
           opt => opt.AddModel("odata", GetEdmModel()).Select().Count().Filter().OrderBy().SetAttributeRouting(true));
    
    ...
    
     public IEdmModel GetEdmModel()
            {
                var builder = new ODataConventionModelBuilder();
                var s = builder.EntitySet<WeatherForecast>("WFC").EntityType;
                s.Collection.Action("APost");
                return builder.GetEdmModel();
            }

和控制器:

    [ODataRoutePrefix("WFC")]
    public class WeatherForecast2Controller : ODataController
    {
     ...
        [HttpPost]
        [EnableQuery]
        [ODataRoute("APost")]
        public IEnumerable<WeatherForecast> APost()
        {
            // this function just returns array of 10 WeatherForecast(s) . 
            ...
        }

    }

标签: c#asp.net-coreroutesodata

解决方案


推荐阅读