asp.net-core
routing
Sök…
Grundläggande dirigering
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
Detta kommer att matcha förfrågningar för /Home/Index
, /Home/Index/123
och /
Ruttningsbegränsningar
Det är möjligt att skapa anpassad routingbegränsning som kan användas inom rutter för att begränsa en parameter till specifika värden eller mönster.
Denna begränsning kommer att matcha ett typiskt kultur / lokala mönster, som en-USA, 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);
}
}
Därefter måste begränsningen registreras innan den kan användas i rutter.
services.Configure<RouteOptions>(options =>
{
options.ConstraintMap.Add("locale", typeof(LocaleConstraint));
});
Nu kan den användas inom rutter.
Att använda den på Controllers
[Route("api/{culture:locale}/[controller]")]
public class ProductController : Controller { }
Använda det på åtgärder
[HttpGet("api/{culture:locale}/[controller]/{productId}"]
public Task<IActionResult> GetProductAsync(string productId) { }
Att använda den i standardrutor
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow