- Modern Web Development with ASP.NET Core 3
- Ricardo Peres
- 360字
- 2021-06-18 18:35:59
Routing to inline handlers
It is possible in ASP.NET Core to handle a request directly, that is, to not route to a controller action. We define inline handlers by using an extension method that specifies the HTTP verb and the template to match, as follows:
- MapGet: HTTP Get
- MapPost: HTTP Post
- MapPut: HTTP Put
- MapDelete: HTTP Delete
- MapVerb: Any named HTTP verb; for example, Get is the same as using MapGet
There are actually two extension methods, MapXXX and MapXXXMiddleware, the first taking a delegate and the second a middleware class. An example follows.
These methods offer two possible signatures (except for Map<verb>, which takes the HTTP verb) and take the following parameters:
- pattern: This is a route template.
- requestHandler: This is a handler that takes the current context (HttpContext) and returns a task.
Here are two examples. In the first, we are merely setting the response content type and writing some text to the output:
endpoints.MapGet(
pattern: "DirectRoute",
requestDelegate: async ctx =>
{
ctx.Response.ContentType = "text/plain";
await ctx.Response.WriteAsync("Here's your response!");
});
Here, we are adding a middleware to the response:
var newAppBuilder = endpoints.CreateApplicationBuilder();
newAppBuilder.UseMiddleware<ResponseMiddleware>();
endpoints.MapGet(
pattern: "DirectMiddlewareRoute", newAppBuilder.Build());
ResponseMiddleware could be something like this:
publicclassResponseMiddleware { privatereadonlyRequestDelegate _next; public ResponseMiddleware(RequestDelegate next) { this._next = next; } publicasyncTask InvokeAsync(HttpContext ctx) { await ctx.Response.WriteAsync("Hello, from a middleware!"); } }
The two approaches, using a handler or the application builder, are similar, as the former gives us direct access to the request context, while the latter allows us to add steps to the request pipeline for a particular route template. It all depends on what you want to do.
Now that we understand how to handle routing requests, next we'll learn how to constrain the applicability of a route.
- 深入理解Bootstrap
- Banana Pi Cookbook
- Linux操作系統(tǒng)基礎(chǔ)案例教程
- Building Serverless Applications with Python
- 區(qū)塊鏈底層設(shè)計(jì)Java實(shí)戰(zhàn)
- C語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo) (第2版)
- HTML5 APP開發(fā)從入門到精通(微課精編版)
- Geospatial Development By Example with Python
- 算法圖解
- 官方 Scratch 3.0 編程趣味卡:讓孩子們愛上編程(全彩)
- C語言從入門到精通
- SQL Server實(shí)例教程(2008版)
- Getting Started with RethinkDB
- 川哥教你Spring Boot 2實(shí)戰(zhàn)
- C++標(biāo)準(zhǔn)庫(第2版)