Конечной целью, которую я хочу достичь, является получение МНОЖЕСТВЕННЫХ ПАРАМЕТРОВ из HTTP POST-запроса, поэтому, если вы знаете какие-либо другие способы ее выполнения, пожалуйста, сообщите мне.Параметр модели контроллера ASP.NET MVC имеет значение null
Я использую
- ASP .NET автономный хостинг MVC, последнюю версию.
- локальный
- атрибут mapping_ для маршрутизации
- некоторые хром расширение для испытаний сообщений POST, и я не забыл добавить
Content-Type: application/json
в заголовок!
Первый код, который я попытался выглядит, как показано ниже:
[RoutePrefix("report")]
public class DefaultController : ApiController
{
[HttpPost, Route("error")]
public HttpResponseMessage Echo(string uid, string buildNumber, string log,
string stack, string context, ...)
{
Console.WriteLine("received message: ");
Console.WriteLine(" uid: " + uid);
Console.WriteLine(" buildNumber: " + buildNumber);
Console.WriteLine(" log: " + log);
Console.WriteLine(" stack: " + stack);
...
return Request.CreateResponse(HttpStatusCode.OK);
}
}
Но если я пытаюсь получить доступ к http://localhost:XXX/report/error
, который будет перенаправлен к контроллеру, я получил следующее сообщение:
No HTTP resource was found that matches the request URI
I несколько понял, что для сообщения POST я должен использовать один параметр (это реальный?) с использованием модели, поэтому я добавил модель ReportModel
и переработал ее следующим образом:
[RoutePrefix("report")]
public class DefaultController : ApiController
{
[HttpPost, Route("error")]
public HttpResponseMessage Echo(ReportModel report)
{
Console.WriteLine("received message: ");
Console.WriteLine(" uid: " + report.Uid);
Console.WriteLine(" buildNumber: " + report.BuildNumber);
Console.WriteLine(" log: " + report.Log);
Console.WriteLine(" stack: " + report.Stack);
...
return Request.CreateResponse(HttpStatusCode.OK);
}
}
Теперь я получаю null
значение для параметра report
. Пожалуйста, помогите мне разобраться, как получить несколько параметров в HTTP POST.
[(? Возможно) ПОСТАНОВИЛИ]
RAW данные, кажется, как показано ниже:
POST /report/error HTTP/1.1
Host: localhost:10999
Content-Type: application/json
Accept: application/json
Cache-Control: no-cache
{ "Uid":"asdf", "BuildNumber":"qwer", "Log":"hoo", "Stack":"asdfasdf", ...
И я отправлял на вкладке 'форм-данных' в расширении Почтальон Chrome, который не работает снова и снова. Затем я перешел на «сырую» вкладку, тогда она просто отлично работает.
Я все еще не знаю, в чем была проблема. Но все же, большое спасибо за вашу помощь.
Другая альтернатива - [FormCollection] (https://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k%28System.Web.Mvc.FormCollection%29%3Bk%28TargetFrameworkMoniker- .NETFramework, версия% 3Dv4.5.2% 29% 3Bk% 28DevLang-csharp% 29 & rd = true), но это больше, если у вас нет фиксированной модели. – Raidri
Как выглядит фактический POST? – Liam
Первое, что нужно проверить, это ваше тело POST с Fiddler. Также класс ReportModel должен иметь общедоступные свойства для де-сериализации. – Padraic