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