Я новичок в odata. Я построил веб-интерфейс API с контроллером, как показано ниже:Odata web api 404 error
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Web.OData.Routing;
namespace HelloWebApi.Controllers
{
public class TestsController : ODataController
{
//
// GET: /Product/
ProductsContext db = new ProductsContext();
private bool TestExists(int key)
{
return db.tests.Any(p => p.key== key);
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
[EnableQuery]
public IQueryable<test> Get()
{
return db.tests;
}
Модель, как показано ниже:
public class Test
{
[Key]
public int key { get; set; }
public string aaa { get; set; }
}
Я также настроен routeconfig, odataconfig, WebAPI конфигурации и global.asax файл, как показано ниже.
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.Ignore("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "Default",
routeTemplate: "{controller}/{action}/{id}"
);
}
}
public class ODataConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Test>("Tests");
config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
}
}
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Ниже показан файл global.asax:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(config =>
{
ODataConfig.Register(config); //this has to be before WebApi
WebApiConfig.Register(config);
});
//FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
Я попытался сделать много изменений. Но я получаю Http 404 не найдена ошибка. Я попытался добавить атрибут [ODataRoute] к имени метода действия. При этом я получаю Http 406 неприемлемый ответ.
URL-адрес, который я пытаюсь: http://localhost:6701/odata/tests/ где odata - это суффикс, а тесты - имя контроллера. Пожалуйста, предложите, что я делаю неправильно.
С [API API OData 5.4] (https://www.nuget.org/packages/Microsoft.AspNet.OData/5.4.0) теперь не поддерживается регистр без учета регистра. [Здесь] (http://odata.github.io/WebApi/#06-01-custom-url-parsing) - простая примерная страница. Спасибо. :) –
Уважаемый Джереми, Большое спасибо за ваше предложение. Теперь я могу ударить точку останова в контроллере, используя указанный вами URL. Однако теперь ответ приходит, поскольку HTTP 406 неприемлем. –
Привет, Сэм, Большое вам спасибо за то, что разделил этот URL. Случай тот же (HTTP 406) один раз, когда я применил caseInsensitive: true. –