Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
При обработке различных запросов есть смысл сделать обработчики асинхронными, например, когда речь идет о получении данных из бд или от внешнего ресурса.
Асинхронные обработчики отличаются от синхронных тем, что класс обработчика наследуется от класса HttpTaskAsyncHandler.
Итак, создадим новый класс UserInfoAsyncHandler:
public class UserInfoAsyncHandler : HttpTaskAsyncHandler { public override async Task ProcessRequestAsync(HttpContext context) { string idString = context.Request.Url.Segments[2]; int id; Int32.TryParse(idString, out id); User user; string result = ""; using(UserContext db = new UserContext()) { user = await db.Users.FindAsync(id); } if(user!=null) { result += "<p>Id=" + user.Id.ToString() +" Name: " + user.Name+"</p>"; } context.Response.Write(result); } }
В данном случае мы получаем третий сегмент строки запроса, который должен содержать id нужной нам записи. И получив id, выводим из базы данных соответствующие ему данные.
Также зарегистрируем новый маршрут, запросы по которому будут обрабатываться данным обработчиком, в файле RouteConfig.cs:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.Add(new Route("User/{id}", new CustomRouteHandler())); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } class CustomRouteHandler : IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext requestContext) { return new UserInfoAsyncHandler(); } }
Новый маршрут будет соответствовать запросам типа http://localhost:8989/user/1, где последний сегмент будет извлекаться обработчиком и использоваться для получения информации из базы данных.