Вы можете использовать промежуточное ПО UseRouter()
для явного сопоставления маршрутов непосредственно как часть конвейера конфигурации вашего приложения.
Например, следующее создает настраиваемый маршрут для обработки запросов Lets Encrypt, которые по умолчанию не работают, если включена какая-либо другая маршрутизация. Следующий код входит в Configure()
метод серверного класса Startup
:
// Handle Lets Encrypt Route(before MVC processing!)
app.UseRouter(r =>
{
r.MapGet(".well-known/acme-challenge/{id}", async (request, response, routeData) =>
{
var id = routeData.Values["id"] as string;
var file = Path.Combine(env.WebRootPath, ".well-known", "acme-challenge", id);
await response.SendFileAsync(file);
});
});
Это существенно упрощает создание простых сценариев маршрутизации или пересылку запросов другим обработчикам.
Обратите внимание, что это необработанный интерфейс, который не включает никакой обработки ввода или вывода, кроме необработанной семантики запроса / ответа.
Если вы что-то делаете с данными в стиле API, я бы все равно рекомендовал использовать MVC и контроллеры, которые обрабатывают все виды вещей, которые в противном случае вам пришлось бы создавать самостоятельно. В Core API и MVC используют один и тот же конвейер контроллера, поэтому вы можете думать о MVC как о веб-API и MVC вместе.
Для наиболее распространенных случаев использования MVC по-прежнему подходит. Вышеупомянутый подход отлично подходит для микросервисов или одноразовых запросов, поскольку это может дать вам небольшой прирост производительности, поскольку ему не нужно загружать какие-либо биты MVC или запускать этот конвейер, но вы несете ответственность за выполнение собственной сериализации и обработки запросов.
person
Rick Strahl
schedule
18.10.2017
app.UseStaticFiles()
. - person NightOwl888   schedule 17.10.2017