如何解决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错误结果。
URL:odata / category / ClearCategoryPictureLinks
有什么想法的人吗?
谢谢!
解决方法
重建解决方案后,问题就消失了。除了在Visual Studio中无法正确更新bin文件之外,我不确定造成这种情况的真正原因是什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。