Запросы к контроллерам с умлаутами (специальными символами) не работают с теломC#

Место общения программистов C#
Ответить
Anonymous
 Запросы к контроллерам с умлаутами (специальными символами) не работают с телом

Сообщение Anonymous »

Для следующего контроллера (созданного с помощью Visual Studio 15.8.2 → шаблон WebApi):

Код: Выделить всё

[Route("api/[controller]")]
[ApiController]
public class StädteController : ControllerBase
{
private static readonly List Städte = new List{"Berlin","Hamburg","München","Köln","Frankfurt","Stuttgart","Düsseldorf","Dortmund","Essen"};

// GET api/Städte
[HttpGet]
public ActionResult Get()
{
return Städte;
}

// Post api/Städte/Leipzig
[HttpPost("{id}")]
public void Post(string id)
{
if (!Städte.Contains(id))
Städte.Add(id);
}

// Post api/Städte
[HttpPost]
public void Post([FromBody] IEnumerable städte)
{
Städte.AddRange(städte?.Except(Städte) ?? Enumerable.Empty());
}
}
Любой запрос без полезной нагрузки будет работать (возвращается OK 200):
Запросы с телом не работают (возвращается NOT FOUND 404):
Использование PUT приводит к эквивалентному результату! Переименование ä в ae будет работать, но мне это не нравится!

Кто-нибудь знает, почему маршрутизация прерывается, если от контроллера ожидается тело действие? Как лучше всего предложить клиенту URI с умлаутами?



Журнал веб-сервера ASP.NET Core:

Код: Выделить всё

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 POST http://localhost:44301/api/St��dte application/json 23
trce: Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware[0]
All hosts are allowed.
dbug: Microsoft.AspNetCore.Builder.RouterMiddleware[1]
Request did not match any routes.
dbug: Microsoft.AspNetCore.Server.Kestrel[9]
Connection id "0HLGJ46FC5IM0" completed keep alive response.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 11.5071ms 404
dbug: Microsoft.AspNetCore.Server.Kestrel[25]
Connection id "0HLGJ46FC5IM0", Request id "0HLGJ46FC5IM0:00000002": started reading request body.
dbug: Microsoft.AspNetCore.Server.Kestrel[26]
Connection id "0HLGJ46FC5IM0", Request id "0HLGJ46FC5IM0:00000002": done reading request body.
info: Microsoft.AspNetCore.Server.Kestrel[32]
Connection id "0HLGJ46FC5IM0", Request id "0HLGJ46FC5IM0:00000002": the application completed without reading the entire request body.


ОБНОВЛЕНИЕ 27 июня 2019 г.:

ASP .NET Core 2.2:
  • POST теперь работает
    GET нет :-(
https://github.com/aspnet/AspNetCore/issues/11640

Подробнее здесь: https://stackoverflow.com/questions/521 ... -with-body
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»