【问题标题】:All OData requests to C# WebAPI fail对 C# WebAPI 的所有 OData 请求均失败
【发布时间】:2017-04-25 05:53:05
【问题描述】:

我正在尝试设置一个使用 OData 4 的 C# Web API。我创建了一个 OdataController 并相信我在 WebApiConfig 中正确路由了它。我在控制器中的每个函数上都放置了一个调试器,以查看请求是否进入方法。当我点击 GET http://localhost:10013/odata/Call 时,第一种方法中的调试器会命中,但是一旦我让调试器继续处理请求,就会失败。在 Chrome 中,我看到请求返回“406 Not Acceptable”,但预览或响应选项卡中没有任何内容。我究竟做错了什么?我可以看到请求正确进入控制器,但为什么它没有返回字符串“call”以及发送406?

其次,如果我发送请求http://localhost:10013/odata/Call(0),控制器中的第一个方法会被击中,而不是第二个(期望的)甚至第三个。如果我想让它达到第二种或第三种方法,我在这里做错了什么?

我已经包含了我正在使用的控制器和 WebApiConfig。

namespace JamesMadison
{
    public static class Call
    {
    }
}

using System.Web.Http.OData;

namespace JamesMadison.Controllers
{
    public class CallController : ODataController
    {
        public string GetCall()
        {
            return "call";
        }

        public string GetCall([FromODataUri] int id)
        {
            return "call";
        }

        public string GetCall([FromODataUri] string key)
        {
            return "call";
        }
    }
}

using System.Web.Http;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;

namespace JamesMadison
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapODataServiceRoute("odata", "odata", model: GetModel());    
        }

        public static Microsoft.OData.Edm.IEdmModel GetModel()
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Call>("Call");

            return builder.GetEdmModel();
        }
    }
}

【问题讨论】:

  • 您的请求是如何产生的? 406 建议您缺少标题。你看到herehere的答案了吗?

标签: c# visual-studio asp.net-web-api odata


【解决方案1】:

在控制器中,我有 using System.Web.Http.OData; 并将其替换为 using System.Web.OData;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多