.NET Core ApiController-Attribute определяет неправильное связывание - PullRequest
0 голосов
/ 05 сентября 2018

В настоящее время у меня есть проблема с новым атрибутом .NET Core 2.1 [ApiController], и я не знаю, как ее решить. Если я применяю атрибут, у меня возникают проблемы с выводом. Без всего работает нормально.

У меня есть контроллер с атрибутом [ApiController] и действие, которое должно принимать пару различных заголовков и модель представления.

Действие выглядит так:

[HttpPut]
public async Task<IActionResult> MyAction(MyHeaderClass myHeaders, [FromBody]MyViewModel myViewModel)
{
    var resultObject = await DoSomething();
    return Json("");
}

Класс MyHeadersClass выглядит следующим образом:

public class MyHeadersClass 
{
    [FromHeader(Name = "X-Some-Id")]
    [Required]
    public string SomeId { get; set; }

    [FromHeader(Name = "X-SomeGuid-Id")]
    [Required]
    public Guid? SomeGuid { get; set; }
}

Если я пытаюсь запустить свое приложение, оно завершается сбоем, потому что .NET Core 2.1 пытается определить, что MyHeaderClass связан с телом запроса.

Единственное, что работает, - это применение атрибута [FromHeader] к моему MyHeaderClass, но затем я должен указать один заголовок с

{
  X-Some-Id: string,
  X-SomeGuid-Id: string
}

Но я хочу иметь один заголовок для каждого свойства, и это работало бы без атрибута. Что я могу изменить, чтобы заставить его работать с атрибутом [ApiController]?

1 Ответ

0 голосов
/ 29 сентября 2018

Не уверен, почему вы хотите отправить информацию заголовка в теле запроса, когда вы помечаете заголовок атрибутом [FromHeader]

Единственное, что работает, - это применить атрибут [FromHeader] к моему MyHeaderClass, но тогда я должен указать один заголовок с

{
  X-Some-Id: string,
  X-SomeGuid-Id: string
}

Я протестировал ваш код на .NET core 2.1, используя POSTMAN, он отлично работает с [FromBody] Arttribute с [ApiController] присутствует .

Вот необработанный HTTP-запрос от POSTMan со значениями заголовка в разделе заголовка, а не в теле запроса:

POST /api/My/Register HTTP/1.1
Host: localhost:5001
Content-Type: application/json
X-Some-Id: idstring
X-SomeGuid-Id: guidstring

Postman-Token: 7fc48dc9-cb0b-46fd-8419-7ad4e3676855

{
    "username":"rajesh",
    "password":"password"
}

Суть в том, что вам нужно добавить значения заголовка в правильном месте в HTTP-запросе, как указано в HTTP-запросе от POSTMAN Tool на снимке экрана ниже:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...