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