【发布时间】:2015-12-05 02:45:06
【问题描述】:
我正在尝试创建一个支持 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);
}
这是我的控制器代码,只是一个简单的 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 目前是一个空表,但这仍应返回一个空数组,对吧?
非常感谢任何帮助! 谢谢。
【问题讨论】:
-
为什么要进行两次路由配置,第一次不需要,可以参考这里的示例github.com/OData/ODataSamples/tree/master/WebApi
-
好吧,我认为 OData 层会神奇地放在原始 Web api 之上 :-)。
标签: odata asp.net-web-api owin