【发布时间】:2020-08-18 04:35:09
【问题描述】:
在这里建立 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