【问题标题】:406 error with OData service in Visual studioVisual Studio 中的 OData 服务出现 406 错误
【发布时间】:2018-06-15 18:46:28
【问题描述】:

我试图弄清楚为什么我的 odata 服务无法正常工作。我不断收到 406 错误,我尝试了所有推荐的解决方案都无济于事。下面是我的代码。

public class Person
{
    public int Id { get; set; }
}

public class TestController : ODataController
{

[EnableQuery]
public IQueryable<Person> GetTest()
{
        try
        {
            var persons = new List<Person>(){new Person{ Id= 1}};
            return persons.AsQueryable();
        }
        catch (Exception ex)
        {
            var here = "dd";
        }
        return null;
    }

在我的 webapiconfig 类中,我有:

        // Web API routes
        config.MapHttpAttributeRoutes();         

        var builder = new ODataConventionModelBuilder();
                 builder.EntitySet<Person>("Person"); 
        config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

它一直失败并出现 406 错误。它在我的控制器中命中断点,但不返回数据。

【问题讨论】:

  • 您在哪一行得到异常?
  • 你试过[Queryable]而不是[EnableQuery]属性吗?
  • 我没有在代码中得到任何异常,只是在提琴手或任何客户端上出现 406 错误。 @JotaBe,它不是重复的。 Queryable 已弃用且无法正常工作。
  • 您使用的是哪个版本?您是否尝试过使用 VS 默认脚手架创建应用程序的“教程版本”并检查它是否有效? (教程版:创建 EF 模型,添加 OData 包,使用 VS 脚手架)会不会是 CORS 问题?您是否在请求中尝试过“Accept=*/*”标头?您能否显示 Fiddler 或控制台捕获的对 Odata 服务的请求的所有标头?
  • 我找到了问题所在,我希望这对其他人有所帮助。我使用的是 config.MapODataServiceRoute(... 而不是 config.Routes.MapODataServiceRoute... 一旦我更改了它,并且使用了正确的 using 语句,一切都开始工作了。感谢你们所有的帮助!!

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


【解决方案1】:

我发现了问题所在。我使用的是config.MapODataServiceRoute(... 而不是config.Routes.MapODataServiceRoute... 一旦我改变了它,并且有了正确的 using 语句,一切都开始工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多