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);
}
我正在尝试创建一个支持 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);
}