#c# #asp.net #asp.net-web-api #asp.net-core
#c# #asp.net #asp.net-web-api #asp.net-core
Вопрос:
Я создаю Asp.net основной веб-api для приема сообщения http, состоящего из нескольких частей. Вот необработанный http-пост, в нем три текстовые строки и один загруженный двоичный файл (может быть файл любого типа).
СООБЩЕНИЕ http://localhost:5001/api/ClosingDoc HTTP/1.1 Хост: localhost:5001 Соединение: поддерживается Длина содержимого: 6957 Принять: application / json, text / plain, */* Источник: http://localhost:8082 Пользовательский агент: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 53.0.2785.116 Safari /537.36 Тип содержимого: составные / данные формы; граница =----WebKitFormBoundaryDTtxFp41DIpArUZ0 Реферер: http://localhost:8082/ Принять-Кодирование: gzip, deflate Принять-Язык: en-US, en; q = 0.8, zh-CN; q = 0.6, zh; q = 0.4 ------WebKitFormBoundaryDTtxFp41DIpArUZ0 Содержимое-Расположение: форма-данные; имя ="Идентификатор" ANYTHING001 ------WebKitFormBoundaryDTtxFp41DIpArUZ0 Содержимое-Расположение: форма-данные; имя ="docType" Тест ------WebKitFormBoundaryDTtxFp41DIpArUZ0 Содержимое-Расположение: форма-данные; имя ="комментарии" Тест ------WebKitFormBoundaryDTtxFp41DIpArUZ0 Содержимое-Расположение: форма-данные; имя = "control.PNG"; имя файла = "control.PNG" Тип содержимого: изображение / png PNG .....
Я создал класс ClosingDocInputFormatter : InputFormatter
, теперь мне нужно добавить в него следующий код в Startup.cs.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
var connection = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<Models.StaticDataContext>(options => options.UseSqlServer(connection));
services.AddMvc(o => {
o.InputFormatters.Add(new ClosingDocInputFormatter());
//??? x.OutputFormatters.Add(new ClosingDocOutputFormatter()); // No need?
o.FormatterMappings.SetMediaTypeMappingForFormat(
"???", MediaTypeHeaderValue.Parse("????")) // What the strings should be?
});
services.AddCors();
}
Вопросы.
- Нужно ли мне определять OutputFormatter, поскольку мне нужно только выполнить часть post?
- Методу
o.FormatterMappings.SetMediaTypeMappingForFormat
нужны два строковых параметра. Какими значениями они должны быть?
Комментарии:
2. В ссылке указано, что это может быть любая произвольная строка. Я добавил
closingDoc
иapplication/closingDoc
соответственно. Однако я все еще получил ошибкуSystem.InvalidOperationException: No media types found in 'MyService.Formatters.ClosingDocInputFormatter.SupportedMediaTypes'. Add at least one media type to the list of supported media types.
3. Я думаю, вы не использовали
FormatFilter
. Смотрите последний раздел.4. любая произвольная строка, но должна быть допустимым типом носителя для этого расширения
5. Я добавил
[FormatFilter]
для контроллера и все равно получил ошибку. Я делаю сообщение так, чтобы URL былhttp://localhost:5001/api/ClosingDoc
. Ошибка:System.InvalidOperationException: No media types found in 'MyService.Formatters.ClosingDocInputFormatter.SupportedMediaTypes'. Add at least one media type to the list of supported media types. at Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.CanRead(InputFormatterContext context) at Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.<BindModelAsync>d__3.MoveNext()