【问题标题】:OData Action Parameters is null in run timeOData 操作参数在运行时为空
【发布时间】:2016-12-19 20:40:09
【问题描述】:

我试图定义 Post OData Web API 操作。参数是一个数字。 我找到了article 我按照文章描述的,这里是源代码:

WebApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.MapODataServiceRoute("odata", "odata", model: GetModel());

    }

    private static Microsoft.OData.Edm.IEdmModel GetModel()
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

        builder.EntitySet<ThumbnailQueue>("ThumbnailQueues");
        builder.EntitySet<Document>("Documents");


        EntitySetConfiguration<ThumbnailQueue> thumbnailQueue = builder.EntitySet<ThumbnailQueue>("ThumbnailQueues");
        var action = thumbnailQueue.EntityType.Action("PostThumbnailQueue");
        action.Parameter<long>("DocumentSN");


        var postThumbnailQueue = thumbnailQueue.EntityType.Collection.Action("PostThumbnailQueue");
        postThumbnailQueue.Parameter<long>("DocumentSN");

        return builder.GetEdmModel();
    }
}

网络 API

public class ThumbnailQueuesController : ODataController
{
    private MarketingEntities db = new MarketingEntities();

    // POST: odata/ThumbnailQueues
    [HttpPost]
    public IHttpActionResult PostThumbnailQueue(ODataActionParameters parameters)
    {
        if (parameters == null) return BadRequest();

        var documentSN = (long)parameters["DocumentSN"];

        if (db.ThumbnailQueues.Any(t => t.DocumentSN == documentSN))
        {
            return BadRequest("Record already exists");
        }

        var myThumbnailQueue = new ThumbnailQueue();
        myThumbnailQueue.DocumentSN = documentSN;
        myThumbnailQueue.Status = 1;
        db.ThumbnailQueues.Add(myThumbnailQueue);


        db.SaveChanges();

        return Ok();
    }

我用Postman来测试功能

但是在运行时,参数为null,所以无法从参数中获取documentSN。我已经解决这个问题好几个小时了,有人可以帮我解决这个问题吗?非常感谢~

【问题讨论】:

  • 另外不要忘记在你的请求中将Content-Type HTTP header 添加到application/json,否则服务器将不知道如何将你的正文解析为参数。

标签: asp.net-web-api odata


【解决方案1】:

为此,您需要使用以下路由:http://localhost:10076/odata/ThumbnailQueues/Default.PostThumbnailQueue

  • ThumbnailQueues - 实体集
  • 默认 - 默认命名空间
  • PostThumbnailQueue - 操作

【讨论】:

  • 谢谢。这很有帮助。我真的很感激!
猜你喜欢
  • 1970-01-01
  • 2015-07-06
  • 2022-01-11
  • 2019-10-28
  • 2021-10-29
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多