Сценарий
Привет! У меня есть командный контроллер API, написанный на ядре ASP.Net 2.2. Контроллер унаследован от ControllerBase и имеет атрибут ApiController . Я хотел бы добавить заголовок местоположения. Я также запросить контроллер оддаты. Версия Odata: 7.2.2 .
Коды Odata:
Мой контроллер Odata:
[ODataRoutePrefix("categories")]
public class ODataCategoriesController : ODataController
Odata Получить действие:
[EnableQuery]
[ODataRoute("{id}")]
public async Task<ActionResult<Category>> GetAsync(Guid id)
Запуск
opt.EnableEndpointRouting = false;
...
app.UseHttpsRedirection();
app.UseMvc(options =>
{
options.EnableDependencyInjection();
options.Select().Filter().OrderBy().Count().Expand().MaxTop(100).SkipToken();
options.MapODataServiceRoute("odata", "api/odata", GetExplicitEdmModel());
});
Пробовал
Я пытался использовать CreatedAtAction, но получил: InvalidOperationException: ни один маршрут не соответствует предоставленным значениям.
В моем контроллере POST:
return CreatedAtAction("Get", "ODataCategories", new { id= categoryResponse.Id }, categoryResponse);
Пробовал 2
У меня естьтакже пробовал с возвращением заголовка местоположения вручную. Но я получил: Заголовок отсутствует в ответе.
Код
[HttpPost]
[ProducesResponseType((int)HttpStatusCode.Created)]
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
public async Task<ActionResult<CreateCategoryResponse>> PostCategory(
[FromBody]CreateCategoryCommand createCategoryCommand)
{
CreateCategoryResponse categoryResponse =
await _mediator.Send(createCategoryCommand);
if (categoryResponse == null)
{
return BadRequest();
}
HttpContext.Response.Headers["Location"] =
$"SomeBuiltLocation";
return Created("", categoryResponse);
}
Сводка
Я ищу решение, которое позволило бы мне включить заголовок Location. Неважно, будет ли это с CreatedAt или вручную.