Как прочитать параметр из Request.Body в ASP.NET Core - PullRequest
0 голосов
/ 08 сентября 2018

Контекст: мое приложение находится за центральным приложением для входа в систему, когда пользователь применяет доступ к моему приложению, мое приложение получает запрос http, содержащий информацию о пользователе. И мне нужно получить информацию о пользователе из тела HttpRequest.

Это то, что я пробовал до сих пор:

currentContext.HttpContext.Request.Query["user-name"].toString();  // got nothing

using (var reader = new StreamReader(currentContext.HttpContext.Request.Body))
{
    var body = reader.ReadToEnd();
}   // I can get the raw HttpRequest Body as "user-name=some&user-email=something"

Можно ли использовать какой-либо метод для анализа параметров и значений из Request.Body? Я попробовал следующее, тоже ничего не получил.

HttpContext.Item['user-name'] \\return nothing Request.Form["user-name"] \\ return nothing

и причина, по которой я не могу использовать привязку модели, заключается в том, что в теле HttpRequest имя ключа - "user-name", а в c # я не могу создать переменную с "-"

Между тем, в моем приложении .net 4.6 Request["KeyName"].toString() работает просто отлично.

Ответы [ 2 ]

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

Предполагая, что речь идет о вызовах POST / PUT / PATCH, вы можете использовать
Request.Form["KeyName"] в вашем методе API и установите «contentType» запроса Ajax как application/x-www-form-urlencoded
Обратите внимание, что Request автоматически доступен внутри вашего метода. Нет необходимости явно называть это.

При использовании вызова GET / DELETE я предпочитаю использовать

[HttpGet("{UserId}")] // api/User/{UserId}
public IActionResult Get(int UserId){
  // do stuff calling directly UserId
}

Или с PUT / PATCH

[Route("User/{EntityId}/{StatusFilter}")] // api/User/{EntityId}/{StatusFilter}
[HttpPut] 
public IActionResult Put(int EntityId, int StatusFilter){
  // do stuff calling directly EntityId and StatusFilter
}

, где вы можете взять данные из Тела, используя Request.Form["KeyName"]

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

Я нашел способ преобразовать необработанное тело HttpRequest в строку запроса, а затем прочитать параметры из нее.

Вот код:

var queryString = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(requestBody);

string paramterValueIWant = queryString["KeyName"];

Существует одна проблема, хотя, когда KeyName не существует в теле, он выдаст исключение.Таким образом, вы должны проверить на ноль или попытаться поймать.

Тем не менее, я чувствую, что должен быть лучший способ прочитать параметр, как я уже упоминал, в моем приложении .net 4.6, все, что мне нужно сделать, этоRequest["KeyName"].

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