asp.net-core
routing
Zoeken…
Basisroutering
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
Dit komt overeen met aanvragen voor /Home/Index
, /Home/Index/123
en /
Routingbeperkingen
Het is mogelijk om aangepaste routebeperkingen te maken die binnen routes kunnen worden gebruikt om een parameter te beperken tot specifieke waarden of patronen.
Deze beperking komt overeen met een typisch cultuur / locale patroon, zoals en-US, de-DE, zh-CHT, zh-Hant.
public class LocaleConstraint : IRouteConstraint
{
private static readonly Regex LocalePattern = new Regex(@"^[a-z]{2}(-[a-z]{2,4})?$",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
public bool Match(HttpContext httpContext, IRouter route, string routeKey,
RouteValueDictionary values, RouteDirection routeDirection)
{
if (!values.ContainsKey(routeKey))
return false;
string locale = values[routeKey] as string;
if (string.IsNullOrWhiteSpace(locale))
return false;
return LocalePattern.IsMatch(locale);
}
}
Nadien moet de Constraint worden geregistreerd voordat deze in routes kan worden gebruikt.
services.Configure<RouteOptions>(options =>
{
options.ConstraintMap.Add("locale", typeof(LocaleConstraint));
});
Nu kan het binnen routes worden gebruikt.
Gebruik het op controllers
[Route("api/{culture:locale}/[controller]")]
public class ProductController : Controller { }
Gebruik het op Acties
[HttpGet("api/{culture:locale}/[controller]/{productId}"]
public Task<IActionResult> GetProductAsync(string productId) { }
Gebruik het in standaardroutes
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/{culture:locale}/{controller}/{id?}");
routes.MapRoute(
name: "default",
template: "api/{controller}/{id?}");
});
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow