Suche…


Grundlegendes Routing

app.UseMvc(routes => 
{ 
    routes.MapRoute( 
    name: "default", 
    template: "{controller=Home}/{action=Index}/{id?}"); 
}); 

Dies entspricht den Anforderungen für /Home/Index , /Home/Index/123 und /

Routing-Einschränkungen

Es ist möglich, eine benutzerdefinierte Routing-Einschränkung zu erstellen, die in Routen verwendet werden kann, um einen Parameter auf bestimmte Werte oder Muster zu beschränken.

Diese Einschränkung entspricht einem typischen Kultur- / Gebietsschema, wie z. B. 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);
    }
}

Danach muss der Constraint registriert werden, bevor er in Routen verwendet werden kann.

services.Configure<RouteOptions>(options =>
{
    options.ConstraintMap.Add("locale", typeof(LocaleConstraint));
});

Jetzt kann es innerhalb von Routen verwendet werden.

Verwendung auf Controllern

[Route("api/{culture:locale}/[controller]")]
public class ProductController : Controller { }

Verwenden Sie es für Aktionen

[HttpGet("api/{culture:locale}/[controller]/{productId}"]
public Task<IActionResult> GetProductAsync(string productId) { }

Verwendung in Standardrouten

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow