404消防网络的OData错误(Odata web api 404 error)

2019-10-23 07:38发布

我是新来的OData。 我已经建造与控制器的web API如下所示:

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不能接受的响应。

我想的网址是: HTTP://本地主机:6701 /的OData /测试/这里的OData是后缀和试验是控制器的名字。 请什么我做错了建议。

Answer 1:

通过配置的路由ODataConventionModelBuilder是大小写敏感的。 在您的代码,您已经定义:

  builder.EntitySet<Test>("Tests");

在此基础上,端点将HTTP://本地主机:6701 / OData的/测试/ (注意在“测试”的大写“T”)。

这是由设计中,为了保持与OData的规范兼容。

这就是说,作为网络API的OData 5.4 ,您可以选择是否启用使用不区分大小写的路线HttpConfiguration类的EnableCaseInsensitive()方法。 例如,在你的ODataConfig.Register()方法,你可以添加:

  config.EnableCaseInsensitive(caseInsensitive: true);

欲了解更多信息,请参阅基本不区分大小写的支持下,微软的ASP.NET Web API的OData为V4文档 。



文章来源: Odata web api 404 error