Owin Odata Web API 自托管 406 错误

Owin Odata Web API Self Host 406 Error

我正在尝试创建一个支持 odata 的 owin 自托管 webapi。 当我调用 get 方法时(只需使用 chrome 浏览它),我添加了所有依赖项并设置了所有内容。 我放在 GET 上的断点被调用并且 returns 无一例外。 但是 chrome 只是 return 一个空白屏幕,在 chrome 的控制台中没有发现 http 错误。 当我在 IE10 中执行此操作时(是的旧版本,但我不允许更新它)我得到 406(不接受 table)。

这是我的 Startup.cs 代码:

  public void Configuration(IAppBuilder appBuilder)
    {
        // Configure Web API for self-host. 
        HttpConfiguration config = new HttpConfiguration();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        //config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
        //config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xml"));

        ODataModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<Product>("Products");

        config.MapODataServiceRoute(
        routeName: "ODataRoute",
        routePrefix: null,
        model: builder.GetEdmModel());

        appBuilder.UseWebApi(config);
    }

这是我的控制器代码,只是一个简单的 GET。

 public class ProductsController : ODataController
{
    ProductsContext db = new ProductsContext();

    [EnableQuery]
    public IQueryable<Product> Get()
    {
        try
        {
            return db.Products;
        }
        catch (System.Exception ex)
        {
            string x = "y";
            return db.Products;
        }
    }
}

db.Products 目前是一个空的 table,但这应该仍然是 return 一个空数组吧?

非常感谢任何帮助! 谢谢

感谢欧阳帆link,帮我解决了问题! 现在我正在使用以下代码:

欧文创业公司

        var config = new HttpConfiguration();
        config.MapODataServiceRoute(routeName: "OData", routePrefix: "odata", model: GetEdmModel());
        appBuilder.UseWebApi(config);

GetEdmModel 函数

    private IEdmModel GetEdmModel()
    {
        var modelBuilder = new ODataConventionModelBuilder();
        modelBuilder.EntitySet<Customer>("Customers");
        return modelBuilder.GetEdmModel();
    }

控制器获取

   public PageResult<Customer> Get(ODataQueryOptions<Customer> queryOptions)
    {
        IQueryable results = queryOptions.ApplyTo(CustomerList.AsQueryable());
        return new PageResult<Customer>(results as IEnumerable<Customer>, Request.ODataProperties().NextLink, CustomerList.Count);
    }