Owin Odata Web API自主机406错误

Owin Odata Web API自主机406错误,odata,asp.net-web-api,owin,Odata,Asp.net Web Api,Owin,我正在尝试创建一个支持odata的owin自宿主webapi。 当我调用get方法时,我添加了所有依赖项并设置了所有内容(只需使用chrome浏览即可)。 我在GET上设置的断点将被调用并返回,没有异常。 但是chrome只是返回一个空白屏幕,在chrome的控制台中没有发现http错误。 当我在IE10中这样做时(是的,旧版本,但不允许我更新),我得到406(不可接受) 这是我的Startup.cs代码: public void Configuration(IAppBuilder appB

我正在尝试创建一个支持odata的owin自宿主webapi。 当我调用get方法时,我添加了所有依赖项并设置了所有内容(只需使用chrome浏览即可)。 我在GET上设置的断点将被调用并返回,没有异常。 但是chrome只是返回一个空白屏幕,在chrome的控制台中没有发现http错误。 当我在IE10中这样做时(是的,旧版本,但不允许我更新),我得到406(不可接受)

这是我的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);
    }
public void配置(IAppBuilder-appBuilder)
{
//为自主机配置Web API。
HttpConfiguration config=新的HttpConfiguration();
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
//config.Formatters.JsonFormatter.SupportedMediaTypes.Add(新的MediaTypeHeaderValue(“应用程序/json”);
//config.Formatters.JsonFormatter.SupportedMediaTypes.Add(新的MediaTypeHeaderValue(“应用程序/xml”);
ODataModelBuilder=新ODataConventionModelBuilder();
建筑商实体集(“产品”);
config.MapODataServiceRoute(
routeName:“ODataRoute”,
routePrefix:null,
模型:builder.GetEdmModel());
appBuilder.UseWebApi(配置);
}
这是我的控制器代码,只是一个简单的获取

 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;
        }
    }
}
公共类产品控制器:ODataController
{
ProductsContext db=新产品上下文();
[启用查询]
公共IQueryable Get()
{
尝试
{
返回数据库产品;
}
catch(System.Exception-ex)
{
字符串x=“y”;
返回数据库产品;
}
}
}
Products现在是一个空表,但它仍然应该返回一个空数组,对吗

非常感谢您的帮助!
谢谢。

谢谢范欧阳的链接,这帮助我解决了问题! 现在我使用以下代码:

Owin启动

        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();
    }
private IEdmModel GetedModel()
{
var modelBuilder=新ODataConventionModelBuilder();
modelBuilder.EntitySet(“客户”);
返回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);
    }
公共页面结果获取(ODataQueryOptions查询选项)
{
IQueryable results=queryOptions.ApplyTo(CustomerList.AsQueryable());
返回新的PageResult(结果为IEnumerable,Request.ODataProperties().NextLink,CustomerList.Count);
}

为什么要进行两次路由配置,第一次是不必要的,您可以参考这里的示例,我认为OData层将神奇地放在原始web api之上:-)。