首页 > 解决方案 > OData API - 406 不可接受

问题描述

在这里建立 NopCommerce。

有一个有趣的问题:

我正在扩展现有的 API 并添加一个允许从类别中清除图片的方法。下面的代码只是我将要实现的代码。它位于 CtageoryController 中

[HttpPost]
    public IActionResult ClearCategoryPictureLinks([FromBody] ODataActionParameters parameters)
    {
        var categoryId = (int)parameters.FirstOrDefault(x => x.Key == "categoryId").Value;

        return Ok(true);
    }

我在 API 的路由提供程序中添加了一些更改。两者之间的代码 //... 我加进去了。

public partial class ODataRouteProvider : IRouteProvider
{
    public int Priority => 10;

    public void RegisterRoutes(IEndpointRouteBuilder routeBuilder)
    {
        //OData
        var serviceProvider = routeBuilder.ServiceProvider;
        IEdmModel model = GetEdmModel(serviceProvider);
        routeBuilder.Count().Filter().OrderBy().MaxTop(100);
        routeBuilder.MapODataRoute("ODataRoute", "odata", model);
        routeBuilder.EnableDependencyInjection();
    }

            private static IEdmModel GetEdmModel(IServiceProvider serviceProvider)
    {
        var builder = new ODataConventionModelBuilder(serviceProvider);
        builder.Namespace = "Default";

        builder.EntitySet<Category>("Category");
        var category = builder.EntityType<Category>();
        builder.EntityType<Category>().Count().Filter().OrderBy().Expand().Select().Page();
    
   //...

        var actionCategoryPictureClear = category.Collection.Action("ClearCategoryPictureLinks");
        actionCategoryPictureClear.Parameter<int>("categoryId");
        actionCategoryPictureClear.Returns<bool>();
        actionCategoryPictureClear.Namespace = typeof(Category).Namespace;

   //...

        var tt = AppDomain.CurrentDomain.GetAssemblies().ToList();
        var types = AppDomain.CurrentDomain.GetAssemblies().Where(
                    x => x.FullName.StartsWith("SevenSpikes")
                || x.FullName.StartsWith("Nop4you")
                || x.FullName.StartsWith("Nop.Services.")
                || (x.FullName.StartsWith("Nop.Plugin.") && !x.FullName.StartsWith("Nop.Plugin.Misc.OData"))
                )
            .SelectMany(a => a.GetTypes());

        builder.Ignore(types.ToArray());


        return builder.GetEdmModel();

}

不幸的是,当我从 POST MAN 调用它时,我添加的操作总是返回 406 Not Acceptable 错误结果。

网址:odata/category/ClearCategoryPictureLinks

有什么想法吗?

谢谢!

标签: odata

解决方案


在我重建我的解决方案后,问题就消失了。除了 bin 文件没有在 Visual Studio 中正确更新之外,我不确定真正的原因是什么。


推荐阅读