【发布时间】:2016-03-04 18:21:02
【问题描述】:
我已经走投无路了,Google 的东西已经用完了。我不知道下面哪一段可能是错的?
localhost:29197/odata/Tests/ 返回 404
localhost:29197/odata?$metadata 返回 404(或者是 localhost:29197/odata/$metadata)
带或不带路由前缀的相同 404。
控制器:
namespace MvcApplication.Api
{
public class TestsController : ODataController
{
[EnableQuery]
public IQueryable<Test> Get()
{
return new List<Test>() {new Test() {Id = 1}}.AsQueryable();
}
}
}
WebApiConfig:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.MapODataServiceRoute(routeName: "odata", routePrefix: "odata", model: GetEdmModel());
}
private static IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Test>("Tests");
var model = builder.GetEdmModel();
return model;
}
}
WebApiConfig.Register 位于RouteConfig.RegisterRoutes 之前
Web.config 包含 <modules runAllManagedModulesForAllRequests="true" />
【问题讨论】:
-
您的代码在我的环境中运行良好(OWIN 在 OS X 上运行)。看起来是 IIS 或 Windows 配置问题。
-
嗯,我在 localhost 上的 IIS Express 中托管
-
顺便说一句,您的服务的正确 URI 是
http://localhost:29197/odata/$metadata和http://localhost:29197/odata/Tests。 -
也不起作用,但很高兴确认,谢谢!
-
您是否在应用程序启动事件中注册了 WebApi 配置?
GlobalConfiguration.Configure(WebApiConfig.Register);,您的项目中还有其他非 odata API,它们是否有效?
标签: c# asp.net asp.net-web-api odata