【问题标题】:ASP.NET Core Odata Service Post not workingASP.NET Core Odata 服务发布不工作
【发布时间】:2019-11-12 14:43:16
【问题描述】:

我在我的 ASP.NET Core 应用程序中实现了 ODATA 服务。 GET 函数工作正常,但 POST 函数有一些问题。

如果我执行 POST,则程序正在执行正确的方法,但我没有收到任何数据。 我的代码中是否缺少任何内容?

控制器:

    [EnableCors]
    [ODataRoutePrefix("documents")]
    public class DocumentController : ODataController
    {
        [ODataRoute]
        [EnableQuery]
        public Document PushDocument([FromBody]Document doc)
        {
            System.Diagnostics.Debug.WriteLine("DomentID: " + doc.Id);
            System.Diagnostics.Debug.WriteLine("Dokument: " + doc.RawDocument);

            return doc;
        }
}

【问题讨论】:

  • 你的意思是你点击了方法但是doc为空?你如何发送数据?

标签: asp.net-core odata


【解决方案1】:

由于使用[FromBody],所以需要以Content-Type: application/json发送数据,在postman中:

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {

        services.AddOData();
        services.AddMvc(options =>
        {
            options.EnableEndpointRouting = false;
        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();

        app.UseMvc(b =>
        {
            b.MapODataServiceRoute("odata", "odata", GetEdmModel()); 
        });
    }
    private static IEdmModel GetEdmModel()
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<Document>("Documents");
        builder.EntitySet<Press>("Presses");
        return builder.GetEdmModel();
    }

【讨论】:

  • 这正是我所做的,但不幸的是仍然没有内容。这是我在执行帖子后从服务器收到的。 { "@odata.context": "localhost:65475/odata/$metadata#documents/$entity", "Id": 0, "RawDocument": null }
  • @zippy234 无法重现,我在上面发布了我的启动
  • 我无法使用 2.2 版。也许这就是问题所在? services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
  • @zippy234 我认为这不会有效果。也许你可以分享一个可重现的演示......
猜你喜欢
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多