OData Action Parameters在运行时为null

时间:2016-12-16 05:49:05

标签: asp.net-web-api odata

我试图定义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();
    }
}

Web 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测试功能

enter image description here

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

1 个答案:

答案 0 :(得分:1)

您需要使用以下路线:http://localhost:10076/odata/ThumbnailQueues/Default.PostThumbnailQueue

  • ThumbnailQueues - 实体集
  • 默认 - 默认名称空间
  • PostThumbnailQueue - action