asp.net-core - 向 OData 控制器添加函数或参数
问题描述
我正在为 ASP.NET Core 使用 ASP.NET 样板框架。我有按照https://aspnetboilerplate.com/Pages/Documents/OData-AspNetCore-Integration的样板 OData 控制器。
我想支持在 GET 方法或自定义 OData 函数中传递自定义参数。我该如何做到这一点AbpODataEntityController
?
问候,大卫
解决方案
查看源代码,看起来他们正在使用标准的“Microsoft.AspNet.OData”Version="7.1.0"。
所以你可能有一个地方可以设置你的EdmModel
. 您应该在控制器中创建一个函数,如下所示:
// odata/Tenants/Default.IsDomainAvailable('<domain name here>')
[HttpGet]
public IActionResult IsDomainAvailable([FromODataUri] string domainName)
{
if (!ModelState.IsValid) return BadRequest();
try
{
var item = _unitOfWork.Tenants
.FindByHostName(domainName)
.FirstOrDefault();
if (item == null)
return Ok(string.Format("{0} is available", domainName));
return StatusCode(StatusCodes.Status409Conflict, string.Format("{0} is not available", domainName));
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
}
然后你可以像这样在你的 EDM 模型构建器中声明一个函数:
private void BuildFunctions(ODataModelBuilder builder)
{
builder.EntityType<TenantDTO>().Collection
.Function("IsDomainAvailable")
.Returns<IActionResult>()
.Parameter<string>("domainName");
}
并像这样从 Postman 调用它:
odata/Tenants/Default.IsDomainAvailable('<domain name here>')
希望这可以帮助。
推荐阅读
- python - Python:如何在 txt 文件中的控制台中写入错误?
- typescript - 基于默认值的 Typescript 泛型类型推断
- mysql - 选择值为空或零的列
- java - javax.persistence、javax.persistence-api和javaee-api的区别
- c# - 如何创建更大的复选框
- protractor - allure.createAttachment 异常错误 - 无法读取未定义的属性“currentStep”
- python-3.x - 数据是否欠拟合?
- android-studio - 使用搜索栏时,Android Studio 有一个非常错误的属性窗口
- sql - 使用组合框中的信息更新记录时的语法问题
- javascript - 负数的阶乘超过最大调用堆栈大小