Как добавить пользовательскую функцию в AbpODataEntityController? - PullRequest
0 голосов
/ 14 марта 2019

В недавней публикации есть некоторые предложения о том, как добавить пользовательскую функцию в AbpODataEntityController.Я пытался, но не могу достичь того, что хочу.

Например, в моем AbpODataEntityController есть два метода, называемые Test и EchoTest.

public class TownsController : AbpODataEntityController<Town>, ITransientDependency
{
    public TownsController(IRepository<Town> repository) : base(repository)
    {
    }

    // [HttpPost]
    public string Test()
    {
        return "inanc";
    }

    // [HttpPost]
    // [HttpGet]
    public IActionResult EchoTest([FromODataUri] string param)
    {
        return Ok(string.Format("The param was {0}", param));
    }
}

И мой Startup.cs имеет:

builder.EntityType<Town>().Collection
    .Function("Test")
    .Returns<string>();
    //.Parameter<string>("param");

builder.EntityType<Town>()//.Action("stringTest")
    .Function("EchoTest")
    .Returns<IActionResult>()
    .Parameter<string>("param");

Простая функция Test в порядке.Это дает результат в виде:

{"@ odata.context": "http://localhost:21021/odata/$metadata#Edm.String","value":"inanc"}

Но функция с параметром с именем param неЯ получаю ошибку 404.

Я вызываю метод по http://localhost:21021/odata/towns/EchoTest?param=foo.

Где я ошибся? У меня должна быть какая-то пользовательская функция, принимающая параметры.

Спасибовы.

1 Ответ

0 голосов
/ 14 марта 2019

Вам не хватает .Collection:

builder.EntityType<Town>().Collection
    .Function("EchoTest")
    .Returns<IActionResult>()
    .Parameter<string>("param");

Правильный URL: http://localhost:21021/odata/Towns/Default.EchoTest(param='foo')

...